2017-02-28 7 views
2

J'ai une plus grande section de code, mais j'ai réduit le problème à cela - Donc, je veux retourner une liste concaténée.do.call() n'aime pas la fonction de base "c" avec une liste

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

Donc, au-dessus se plaint de l'argument SECOND n'étant pas une liste. Pourquoi cela ne retournera-t-il pas une liste concaténée? Pourquoi? C est une fonction légitime, et il est passé une liste?

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

Alors "quoi" est l'argument de la fonction dont il se plaint.

+0

De quelle langue parlez-vous? R? –

+0

Si vous êtes toujours capable de reproduire votre problème, pouvez-vous essayer 'do.call (" c ", ...' au lieu de 'do.call (c, ...'? –

Répondre

2

je vais répondre à « voler » ma réponse de this comment par Nick Kennedy:

Il pourrait être préférable de mettre l'c entre guillemets.

Si l'utilisateur a une fonction non-fonctionnelle nommée c dans l'environnement global, do.call(c, dates) échouera avec l'erreur "Error in do.call(c, list(1:3)) : 'what' must be a character string or a function".

De toute évidence, il n'est peut-être pas recommandé de définir c, mais il est assez fréquent que les utilisateurs fassent a <- 1; b <- 2; c <- 3.

Dans la plupart des cas, R fonctionne toujours correctement dans ce scénario; c(1, 2) fonctionnera toujours, mais do.call(c, x) ne fonctionnera pas.

Bien sûr, si l'utilisateur a redéfini c comme étant une fonction (par exemple c <- sum), alors do.call utilisera la fonction redéfinie.