如何在没有引号的情况下接受文本/字符参数

Ale*_*lex 3 quotes text r function character

对不起,如果问题不清楚.随意改变它.

所以基本上我试图找到一种方法,以便函数的文本/字符串参数不需要引号.

foo  = function(x, y, data){
    n1 = length(data[,x])
    n2 = length(data[,y])
    cat(n1, n1)
 }
Run Code Online (Sandbox Code Playgroud)

如果我使用以下代码

data(survey)
foo(Sex, Fold, survey)
Run Code Online (Sandbox Code Playgroud)

我会收到一条错误消息.但是,如果我使用以下内容:

foo("Sex", "Fold", survey)
Run Code Online (Sandbox Code Playgroud)

要么

foo(1, 5, survey)
Run Code Online (Sandbox Code Playgroud)

这个功能会给我我想要的东西.所以我想知道是否有任何方法来构造函数,以便我不需要在列名称周围使用引号.谢谢!

jor*_*ran 8

好吧,这将符合以下符号:

foo  = function(x,y, data){
    n1 <- length(eval(substitute(x),data))
    n2 <- length(eval(substitute(y),data))
    cat(n1,n2)  
}
Run Code Online (Sandbox Code Playgroud)

如果你想要使用带引号的变量名和整数索引,你可以简单地检查xy在开始时使用一些简单的if-else分支.

但它附带标准警告,eval(substitute())成语可能是危险的使用.(你可能无法总是预见到在某些情况下它不会起作用,你可能没有意识到它什么时候不起作用.)