NAMESPACE가있는 또 다른 문제는 패키지 foo 에서 내 보내지 않은 함수를 실행하려고한다는 것 입니다.
예를 들어 (생각했지만 알고 있습니다) :
> mod <- prcomp(USArrests, scale = TRUE)
> plot.prcomp(mod)
Error: could not find function "plot.prcomp"
먼저, S3 메소드를 직접 호출해서는 안되지만 plot.prcomp
실제로 패키지 foo 에서 유용한 내부 함수 라고 가정하자 . 수행중인 작업을 알고있는 경우 이러한 함수를 호출하려면를 사용해야합니다 :::
. 함수가있는 네임 스페이스도 알아야합니다. 사용 getAnywhere()
하여 함수가 패키지 통계 에 있음을 발견했습니다 .
> getAnywhere(plot.prcomp)
A single object matching ‘plot.prcomp’ was found
It was found in the following places
registered S3 method for plot from namespace stats
namespace:stats
with value
function (x, main = deparse(substitute(x)), ...)
screeplot.default(x, main = main, ...)
<environment: namespace:stats>
이제 다음을 사용하여 직접 호출 할 수 있습니다.
> stats:::plot.prcomp(mod)
plot.prcomp
목적을 설명하기 위해 예제로 사용했습니다 . 정상적인 사용에서는 이와 같은 S3 메소드를 호출해서는 안됩니다. 그러나 내가 말했듯이, 호출하려는 함수가 존재하지만 (예 : 숨겨진 유틸리티 함수 일 수 있지만)에있는 namespace
경우 R은 찾을 네임 스페이스를 알려주지 않으면 함수를 찾을 수 없다고보고합니다 .
이것을 다음과 비교하십시오 :
stats::plot.prcomp
위 의 오류는를 stats
사용 하는 동안 오류가 올바르게 알려주므로 plot.prcomp
내 보내지 않기 때문에 실패합니다 stats
.
오류 : 'plot.prcomp'는 'namespace : stats'에서 내 보낸 객체가 아닙니다.
이것은 다음과 같이 문서화됩니다 :
pkg :: name은 네임 스페이스 pkg에서 내 보낸 변수 이름의 값을 반환하고 pkg ::: name은 내부 변수 이름의 값을 반환합니다.