2016-11-27 4 views
0

여러 개의 기능이있는 R 패키지가 있습니다 (모두 내보내집니다). 함수 중 하나는 실행 중에 다른 함수를 내부적으로 호출합니다. 나는 전체 패키지를로드하지 않고 네임 스페이스를 통해이 기능을 실행하면, 그것은 오류가 발생합니다 : '기능을 찾을 수 없습니다 ..'예컨대 들어네임 스페이스에서 함수를 호출 할 때 함수를 찾을 수 없습니다.

: foobar이 두 가지 기능입니다. foobar을 내부적으로 호출합니다. 그러나 foo을 네임 스페이스를 통해 호출하면 mypackage::foo()이 표시되어 could not find function "bar"이라는 오류가 발생합니다. 라이브러리를 먼저로드하고 네임 스페이스를 통해 실행하면 제대로 실행됩니다.

#doesnot work 
mypackage::foo() 
could not find function "bar" 
#works 
library(mypackage) 
mypackage::foo() 

NAMESPACE 파일에는 두 가지 기능을 모두 내 보낸 두 가지 기능이 있습니다.

답변

0

:: 또는 ::: 기능을 사용하면 문제가되는 것은 기능 코드 만 작업 공간으로 가져 오는 것입니다. 그래서 mypackage의 보조 기능이나 지원 기능은 "해석기 공간"즉 해석자가 볼 수있는 객체로 가져 오지 않습니다. 따라서 옵션 2가 작동하고 옵션 1이 실패합니다. 내가 분명히하는 이유는 무엇인가. 나는이 네임 스페이스를로드에서 파생 알고있는 기능을 해킹하고 때

, 나는 일반적으로 해킹 프로세스를 완료 :

environment(hacked_fun) <- environment(orig_fun) 

그러나 당신이 디스크에서 코드를 당길 때이 옵션이 아니다 "다발 결장 기능". 이는 숙련 된 R 프로그래머가 패키지로 개발하는 주요 이유이기도합니다. 패키지 작성의 코딩 규율은 패키지 종속성 정의를 지원합니다.

+0

해결 방법이 있습니까? 아니면이'bar' 함수를 export하지 않고 내부 함수로 만드는 것이 유일한 방법일까요? – PoisonAlien

+0

항상 함수의 코드를보고 mypackage ::: other_func를 사용하여 복사본을 편집하여 모든 종속성을 호출 할 수 있습니다. –

관련 문제