2017-02-28 3 views
2

큰 코드 섹션이 있지만이 문제를 좁혀 냈습니다. 그래서 연결 목록을 반환하고 싶습니다.do.call()은 목록의 기본 함수 "c"를 좋아하지 않습니다.

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 

"what"은 불평하고있는 함수 인수입니다.

+0

무슨 소리가 나나요? 아르 자형? –

+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은 재정의 된 기능을 사용합니다.