我有更多的代码,但我已经将问题缩小到了这个范围 - 所以我想返回一个连锁列表。
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
所以"什么"是它抱怨的函数参数。
答案 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
将使用重新定义的功能。