Substract从函数参数传递了对象名称

时间:2017-10-05 09:14:15

标签: r

我对substr有疑问,但我不知道它是否需要使用。我已经将示例简化为最小化,因此我只需要将结果复制到函数中并循环遍历它。

想象一下你有一个日期框架(“House”),但在函数内部,你必须将它作为输入引用。由于会有很多数据框通过它,所以它不能被称为“众议院”。

所以,数据框架“House”。在函数内部,获取输入的名称。但是,我想将数据框名称的三个首字母与“侯”进行比较。如果为TRUE,则返回一些值,如果为false则返回另一个值。

我试过但我无法理解。我不知道是否有人能够帮助我,否则我的问题会永远陷入黑点。

任何帮助都会有用。我需要回复者为[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

2 个答案:

答案 0 :(得分: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) 
}

答案 1 :(得分:0)

在功能内部?标准技巧是deparse(substitute(.))

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

fun(House)
#[1] TRUE