do.call()不喜欢基函数" c"列表

时间:2017-02-28 02:28:02

标签: r do.call

我有更多的代码,但我已经将问题缩小到了这个范围 - 所以我想返回一个连锁列表。

do.call(c,"X")
Error in do.call(c, "X") : second argument must be a list

因此,它抱怨SECOND参数不是列表。

asimplelist=list(2,3,4)
class(asimplelist)
[1] "list"
do.call(c,asimplelist)
Error in do.call(c, asimplelist) : 
'what' must be a function or character string

为什么这不会返回连锁列表? C是一个合法的函数,它被传递一个列表?

args(do.call)
function (what, args, quote = FALSE, envir = parent.frame()) 
NULL 

所以"什么"是它抱怨的函数参数。

1 个答案:

答案 0 :(得分:3)

我将通过this comment来回答Nick Kennedy的“窃取”我的答案:

c置于双引号中可能会更好。

如果用户在全局环境中具有名为c的非功能,则do.call(c, dates)将失败并显示错误"Error in do.call(c, list(1:3)) : 'what' must be a character string or a function"

显然,定义c可能不是最佳做法,但人们常常a <- 1; b <- 2; c <- 3

对于大多数用途,R在这种情况下仍然可以正常工作; c(1, 2)仍然有效,但do.call(c, x)不会。

当然,如果用户已将c重新定义为功能(例如c <- sum),则do.call将使用重新定义的功能。