很抱歉,如果问题不清楚。随意改变它。
所以基本上我试图找到一种方法,以便函数的文本/字符串参数不需要引号。
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)
该功能会给我我想要的东西。所以我想知道是否有任何方法来构造函数,以便我不需要在列名称周围使用引号。谢谢!
答案 0 :(得分:8)
嗯,这适用于符号:
foo = function(x,y, data){
n1 <- length(eval(substitute(x),data))
n2 <- length(eval(substitute(y),data))
cat(n1,n2)
}
如果您希望这也适用于引用的变量名称和整数索引,您只需在开头使用一些简单的x
分支检查y
和if-else
。
但它带有标准警告,即eval(substitute())
成语可能会使用起来很危险。 (在某些情况下,您可能无法始终预测不会的工作方式,并且当它不工作时您可能意识到。)
答案 1 :(得分:0)
这与数据框的索引[]
参数有关。
当你说DF [,x]时,它告诉R哪个列可以从DF中选择。如果x是来自DF的文字列“Sex”,它将告诉R您希望向量DF$Sex
中的所有列。
因此,如果您使用“性别”/“折叠”或1,5
,那么您的功能应该是原样。如果您想使用Sex
和Fold
,那么您的功能应为:
foo = function(x,y,data){
n1 <- length(x)
n2 <- length(y)
cat(n1,n2)
}