"Imports"
보다 안전합니다 "Depends"
(또한 사용하는 다른 패키지와 관련하여 '더 나은 시민'을 사용하여 패키지를 만듭니다 "Depends"
).
"Depends"
지시 시도는 다른 패키지에서 함수는 주 검색 경로 (에 의해 반환되는 환경, 즉 목록을 다른 패키지를 부착하여 사용할 수 있는지 확인합니다 search()
). 그러나 나중에로드 된 다른 패키지가 검색 경로에서 동일한 이름의 함수를 이전에 배치하면이 전략을 방해 할 수 있습니다. 챔버 ( SoDA에서 )는 함수의 예를 사용하는데 "gam"
,이 함수 는 패키지 gam
와 mgcv
패키지 모두에 있습니다. 두 개의 다른 패키지가로드 된 경우 (그중 하나는에 의존하고 다른 패키지는 gam
하나에 따라 달라짐) mgcv
호출에 의해 발견되는 기능 gam()
은 두 패키지가 연결된 순서에 따라 달라집니다. 안좋다.
"Imports"
지시자는 그 기능에 배치되어 어떠한지지 패키지 표기 <imports:packageName>
(직후 검색 <namespace:packageName>
대신 일반 검색 경로로). 예제의 패키지 중 하나가 위의 사용한 경우 "Imports"
(도 필요 메커니즘 import
또는 importFrom
의 지시 NAMESPACE
파일), 문제는 두 가지 방법으로 개선 될 것이다. (1) 패키지 자체 mgcv
는 어떤 기능이 사용 되는지에 대한 제어권을 얻습니다 . (2) 메인 검색 경로에서 가져온 객체를 제거하면 다른 패키지의 다른 mgcv
기능 에 대한 종속성이 손상되지 않을 수도 있습니다.
그렇기 때문에 네임 스페이스를 사용하는 것이 좋은 습관이고, 이제는 CRAN에 의해 시행되는 이유, 특히 사용하는 "Imports"
것이보다 안전한 이유 "Depends"
입니다.
중요한 경고를 추가하기 위해 편집 :
이 하나 개 위의 조언 불행하게도 일반적인 예외 : 패키지는 패키지에 의존하는 경우 A
자체 "Depends"
다른 패키지에서 B
, 패키지가 가능성 첨부해야합니다 A
와 "Depends
지시어.
때문입니다 패키지의 기능 A
패키지 것이라는 기대로 기록 된 B
그 기능이 부착 될 search()
경로 .
"Depends"
지시어는로드 패키지를 첨부 할 A
어떤 순간 패키지에서 A
의 자신의 "Depends"
지시는, 연쇄 반응에 원인 패키지가됩니다 B
로드와 연결도 할 수 있습니다. A
그러면 패키지 의 함수는 패키지 B
에서 함수가 의존 하는 함수를 찾을 수 있습니다 .
"Imports"
지시어는로드 것이지만 되지 패키지를 첨부 A
과 의지 도 부하 도 패키지를 연결합니다 B
. ( "Imports"
모든 후, 해당 패키지 작가 네임 스페이스 메커니즘을 사용하고 해당 패키지가 기대하는 A
사용됩니다 "Imports"
의 모든 기능에 포인트 B
.이 액세스를 필요로하는) 패키지의 모든 기능에 대한 당신의 함수에 의해 호출 A
패키지의 기능에 의존하는 B
의지 결과적으로 실패합니다.
유일한 두 가지 솔루션은 다음 중 하나입니다.
- 지시문을
A
사용 하여 패키지에 패키지 를 첨부하십시오 "Depends"
.
- 장기적으로는 패키지 관리자
A
에게 문의하여 네임 스페이스를보다 신중하게 작성하도록 요청하십시오 ( 이 관련 답변 에서 Martin Morgan의 말로 ).