3

我有一个更大的代码部分,但我已经将问题缩小到这个 - 所以我想返回一个连接列表。

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

所以上面它抱怨第二个参数不是一个列表。

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 

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

4

1 回答 1

4

我将从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将使用重新定义的函数。

于 2017-09-14T09:38:29.253 回答