R 如何接受不带引号的文本/字符参数

R 如何接受不带引号的文本/字符参数,r,function,text,character,quotes,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  = 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  = function(x,y, data){
    n1 <- length(eval(substitute(x),data))
    n2 <- length(eval(substitute(y),data))
    cat(n1,n2)  
}
foo=函数(x,y,数据){

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

当你说DF[,x]时,它告诉R从DF中选择哪个列。如果x是DF中的文本列“Sex”,它会告诉R你想要向量
DF$Sex
中的所有列

因此,如果您使用“Sex”/“Fold”或
1,5
,则您的功能应保持原样。如果您要使用
Sex
Fold
,则您的功能应为:

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

n1您是否需要
foo(性、折叠、调查)
foo(1、5、调查)
使用相同的函数?是的。如果可能的话,那就太好了!你能至少提到一些它可能不起作用的情况吗?@civilstat我见过的最常见的情况是在处理涉及公式的对象时,公式所附的环境很重要,因此如果你不十分小心的话保留有关该环境的信息eval()不会起作用,也不会产生非常意外的结果。谢谢。乍一看,公式似乎是eval(substitute())的自然用例,因此知道这是有问题的非常有帮助!@civilstat好吧,你是对的,
model.frame
使用
eval
,例如(但并非所有情况下都是替换)。人们往往忘记了,
substitute
还有一个环境参数,因此当他们试图用自己的方式,比如说,重复使用作为参数传递给函数的公式时,事情会很快变得非常复杂。
foo = function(x,y,data){
n1 <- length(x)
n2 <- length(y)
cat(n1,n2)
}