2012-10-23 27 views
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) 

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

+0

你需要_both_'FOO(性别,折,调查)'和'FOO(1,5,调查)'与合作相同的功能? – joran

+0

是的。如果可能的话,那会很棒! – Alex

回答

7

那么,这将与符号的工作:

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())成语可能会使用危险。 (您可能并不总是能够预见如何会在某些情况下不工作,你可能不实现时,它无法正常工作。)

+1

+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) 
} 
相关问题