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

时间:2012-10-23 22:09:53

标签: r function text character quotes

很抱歉,如果问题不清楚。随意改变它。

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

foo  = function(x, y, data){
    n1 = length(data[,x])
    n2 = length(data[,y])
    cat(n1, n1)
 }

如果我使用以下代码

data(survey)
foo(Sex, Fold, survey)

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

foo("Sex", "Fold", survey)

foo(1, 5, survey)

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

2 个答案:

答案 0 :(得分:8)

嗯,这适用于符号:

foo  = function(x,y, data){
    n1 <- length(eval(substitute(x),data))
    n2 <- length(eval(substitute(y),data))
    cat(n1,n2)  
}

如果您希望这也适用于引用的变量名称和整数索引,您只需在开头使用一些简单的x分支检查yif-else

但它带有标准警告,即eval(substitute())成语可能会使用起来很危险。 (在某些情况下,您可能无法始终预测不会的工作方式,并且当它不工作时您可能意识到。)

答案 1 :(得分:0)

这与数据框的索引[]参数有关。

当你说DF [,x]时,它告诉R哪个列可以从DF中选择。如果x是来自DF的文字列“Sex”,它将告诉R您希望向量DF$Sex中的所有列。

因此,如果您使用“性别”/“折叠”或1,5,那么您的功能应该是原样。如果您想使用SexFold,那么您的功能应为:

foo = function(x,y,data){
n1 <- length(x)
n2 <- length(y)
cat(n1,n2)
}