【问题标题】:Working with "..." input in R function在 R 函数中使用“...”输入
【发布时间】:2016-06-02 18:52:18
【问题描述】:

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

"..." 特殊变长参数***

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

因此,我尝试了:

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 的输入或实现中,是否有更好的整体方法来做到这一点?

非常感谢任何帮助!

【问题讨论】:

  • 你可能应该阅读 Hadley 书中的this 部分(慢慢读几遍,这是一个困难的话题)。

标签: r function input user-input tapply


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-08
    • 1970-01-01
    • 2013-06-20
    • 1970-01-01
    • 1970-01-01
    • 2018-05-19
    • 2018-01-19
    相关资源
    最近更新 更多