2017-10-05 53 views
1

我有一个关于substr的问题,但我不知道它是否需要使用。我将示例简化为最小化,所以我只需要将结果复制到一个函数中并循环。假设你有一个日期框架(“House”),但是在函数内部,你必须将它作为输入。由于会有很多数据框经过它,所以它不能被称为“House”。Substract通过函数参数传递对象名称

所以,数据帧“房子”。在函数内部,获取输入的名称。但是,我想比较数据框名称的三个首字母与“Hou”。如果它是真的,它会返回一些值,如果它是假的,则返回另一个值。

我已经尝试过,但我无法弄清楚。我不知道是否有人能够帮助我,否则我的问题将永远陷入黑点。

任何帮助将是有用的。我需要回答者是[1] TRUE

House <- data.frame("SN" = 1:2, "Country" = c("Spain","France"), "Name" = c("John","Dora")) 

input <- House 

((substr("input", start=1, stop=3) == "Hou")) 

[1] FALSE 

Is there any way, to make this TRUE? I always get FALSE, as what it´s doing is compare "inp" with "Hou". 

If I take the quotes out, 

House <- data.frame("SN" = 1:2, "Country" = c("Spain","France"), "Name" = c("John","Dora")) 

input <- House 

(substr(input, start=1, stop=3) == "Hou")) 

[1] FALSE FALSE FALSE 
+0

你应该有房子,如“串”,并输入而不“” – Mateusz1981

回答

1

传递您的数据帧input和字符串匹配为word

foo <- function(input, word = "Hou") { 
    name <- as.character(substitute(input)) 
    res <- substr(name, 1, 3) == word 
    return(res) 
} 

House <- Duck <- data.frame() 
foo(House) 
[1] TRUE 
foo(Duck) 
[1] FALSE 

编辑(到OP的评论作出回应):

foo <- function(input, word = "Hou") { 
    name <- as.character(substitute(input)) 
    res <- substr(name, 1, 3) == word 
    if (res) { 
     nametitle <- input[1, 2] 
    } else { 
     nametitle <- input[1, 3] 
    } 
    return(nametitle) 
} 
+0

嗨, 试想一下,在函数之前,我们称之为数据帧 输入< - 房子,然后我们被软件写功能 富< - 功能(输入,字= “侯”){ 名称< - as.character(替代(输入)) RES < - SUBSTR(姓名,1,3)==字 返回(RES) } 然后,我需要它的 富(输入) [1]真 –

+0

@ JM_44我编辑我的回答r – PoGibas

+0

我不想再浪费你的时间了,但我需要的就是这一点。 唯一的一点,如果在这个例子中,“房子”里面的引号,它只是一个字的房子。但我所拥有的是数据框。 如果你可以拿出一个电话它输入< - 众议院,并使其工作,这正是我所需要的 –

0

里面的函数?标准把戏是deparse(substitute(.))

fun <- function(input){ 
    inpName <- deparse(substitute(input)) 
    substr(inpName, start=1, stop=3) == "Hou" 
} 

fun(House) 
#[1] TRUE 
相关问题