2017-02-28 17 views
2

私はより大きなコードセクションを持っていますが、この問題を絞り込んでいます - したがって、連結リストを返したいと思います。do.call()は、リストの基底関数 "c"が好きではありません

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 

"what"は不平を言う関数の引数です。

+0

あなたはどのような言語について話していますか? R? –

+0

問題を再現できる場合は、 'do.call(c、...'?)の代わりに 'do.call(" c "、... –

答えて

2

私はNick Kennedyによってthis commentから私の答えを「盗む」お答えします:

二重引用符で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は再定義された関数を使用します。

関連する問題