2016-10-10 3 views
2

파이프의 네임 스페이스를 사용하여 함수를 호출 할 때 코드의 마지막 줄의 동작이 다른 이유와 실제로 오류 메시지가 무엇을 의미하는지 설명해주십시오. :함수의 우선 순위가 파이핑에서 네임 스페이스로 호출되었습니다.

library(magrittr) 
1:5 %>% cumsum 
#### [1] 1 3 6 10 15 
1:5 %>% cumsum() 
#### [1] 1 3 6 10 15 
1:5 %>% base::cumsum() 
#### [1] 1 3 6 10 15 
1:5 %>% (base::cumsum) 
#### [1] 1 3 6 10 15 
1:5 %>% base::cumsum 
#### Error in .::base : unused argument (cumsum) 

내가 진정으로는 가장 높은 우선 순위가 멀리 떨어져 특별한 사업자, 네임 스페이스 연산자 ::입니다 operator precedence rules 상태 때문에 일 것이라고 생각했다.

감사합니다.

답변

3

이 함수의 설명을 호출하기 때문에 base::cumsum은 오류를 말하는 인수가 아닌 function (x) .Primitive("cumsum")을 반환합니다. 위의 행을 볼 때 ()을 추가하면 1:5 인수가있는 함수가 호출됩니다.

더 좋은 예는 나만의 기능입니다.

> foo 
function(){cat("hello")} 

은 그래서 base::cumsum와 비슷하지만, 나는 그것이 어떻게 든 당신에게 그 설명을 제공입니다 프로그램 만 보호 또는 추측 : 인수없이 호출하면

foo<-function(){cat("hello")} 

는 그 코드를 반환합니다.

+0

고마워요.하지만이 원시 함수가 정확히 무엇을하는지는 나에게 여전히 불분명합니다 ... 패키지의 네임 스페이스를 지정할 때 동일한 함수가 아니라고 말합니까? – agenis

+0

일종의, 예. '()'를 쓰지 않으면'네임 스페이스 '에서 그것을 호출하는 것에 상관없이 인자를 전달하는 의미에서 함수로 취급되지 않습니다. 변수의 이름을 입력하면 인쇄됩니다. 이제 함수에 대한 몇 가지 설명이 출력되고, 따라서 인자를 전달할 것을 기대하지 않고 시도하면 오류가 발생합니다. –

+0

그것은'str (cumsum)'과'str (base :: cumsum)'을 실행할 때 똑같은 결과를 낳기 때문에 이상합니다. 우연히이 주제를 읽을 의사가 있습니까? – agenis

관련 문제