3

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

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

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)

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

4

2 回答 2

8

好吧,这将适用于符号:

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

如果您希望它也适用于带引号的变量名称和整数索引,您可以简单地检查xy在开始时进行一些简单的if-else分支。

但它带有标准警告,即该eval(substitute())成语使用起来可能很危险。(在某些情况下,您可能并不总是能够预料到它是如何不起作用的,并且您可能没有意识到它什么时候不起作用。)

于 2012-10-23T22:33:38.623 回答
0

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

当您说 DF[,x] 时,它是在告诉 R 从 DF 中选择哪一列。如果 x 是来自 DF 的文字列“Sex”,它将告诉 R 你想要 vector 中的所有列DF$Sex

因此,如果您使用 "Sex"/"Fold" 或1,5,那么您的功能应该是原样。如果你想使用Sexand Fold,那么你的功能应该是:

foo = function(x,y,data){
n1 <- length(x)
n2 <- length(y)
cat(n1,n2)
}
于 2012-10-23T22:35:48.280 回答