在R函数中使用“...”输入

时间:2016-06-02 18:52:19

标签: r function input user-input tapply

我正在组合一个R函数,它通过docs中描述的...参数获取一些未定义的输入:

  

“...”特殊变量长度参数***

这个想法是用户将在这里输入多个列名,每个列名都属于用户指定的数据集。然后,这些列将与tapply的因变量进行交叉制表。该函数是返回一个表(独立变量x indedependent变量)。

因此,我试过了:

plotter=function(dataset, dependent_variable,  ...) 

{


indi_variables=list(...); # making a list of the ... input as described in the docs
result=with (dataset, tapply(dependent_variable, indi_variables, mean); # this fails

}

我认为这应该有效,因为tapply可以将列表作为输入。 但它不是在这种情况下('tapply中的错误...参数必须具有相同的长度')我认为这是因为indi_variables是一个字符串列表。 如果我手动输入列表的内容并省略引号,一切正常。

但是,如果用户将列名称作为非字符串提供给函数,则R会将它们解释为变量名称;我无法弄清楚如何以正确的方式转换列表indi_variables,尝试这样的事情失败:

indi_variables=lapply(indi_variables, as.factor)

所以我想知道

  • 导致上述错误的原因是什么?我的解释是否正确?
  • 如何以正确的方式改变通过...创建的列表?
  • tapply的输入或实现中,是否有更好的方法可以做到这一点?

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

感谢Joran的有益阅读,我提出了这些改进,而不是让事情变得有效......

indi_variables=substitute(list(...));

result=with (dataset, tapply(dependent_variable, eval(indi_variables, dataset), FUN=mean));