programing

Imports/Depends 사용 시기에 대한 더 나은 설명

itmemos 2023. 7. 1. 08:05
반응형

Imports/Depends 사용 시기에 대한 더 나은 설명

"R 확장 작성" 매뉴얼에서는 가져오기 또는 종속 항목을 사용할 시기에 대해 다음과 같은 지침을 제공합니다.

일반적인 규칙은

  • 라이브러리(pkgname)를 사용하여 패키지를 로드하는 데 네임스페이스만 필요한 패키지는 '의존' 필드가 아닌 '가져오기' 필드에 나열되어야 합니다.
  • 라이브러리(pkgname)를 사용하여 패키지를 성공적으로 로드하기 위해 연결해야 하는 패키지는 '의존' 필드에만 나열되어야 합니다.

누가 이것에 대해 좀 더 명확하게 설명해 줄 수 있습니까?패키지에 이름 공간만 로드하면 되는 경우와 패키지를 첨부해야 하는 경우를 어떻게 알 수 있습니까?두 가지 모두의 예는 무엇입니까?일반적인 패키지는 다른 패키지의 함수를 호출하는 함수의 모음이라고 생각합니다(일부 작업이 이미 코드화되어 있음).위의 시나리오 1과 2 중 어느 것입니까?

편집

이 특정 주제에 대한 섹션과 함께 블로그 게시물을 작성했습니다('Import v Depends' 검색).시각 자료를 통해 훨씬 더 쉽게 이해할 수 있습니다.

"Imports" 합니다."Depends"를 '더 나은 시민."Depends").

A "Depends"를 주 경로에 할 수 있는지 에서 반환된 ).search()그러나 나중에 로드된 다른 패키지가 검색 경로에 이전에 동일한 이름의 함수를 배치하는 경우 이 전략이 중단될 수 있습니다.챔버(SoDA에서)는 함수의 예를 사용합니다."gam"그것은 두 가지 모두에서 발견됩니다.gam그리고.mgcv꾸러미두 개의 다른 패키지가 로드된 경우 그 중 하나는 다음과 같습니다.gam그리고 하나는 다음과 같습니다.mgcv호에의 발기능된견해에 대한 에 의해 gam()두 개의 패키지가 부착된 순서에 따라 달라집니다.좋지 않습니다.

안 안"Imports"지침은 기능이 배치될 모든 지원 패키지에 사용되어야 합니다.<imports:packageName>) 뒤에 됨)<namespace:packageName>경로 사용합니다.을(를) 사용할 수 있습니다. 중 , " 위예서패중하사경용우된가나키지에의경우▁the▁if▁in사▁either된""Imports" 메니즘또(한커필요함또))import또는importFrom의시지의 NAMESPACE가 어떤 파일을 할 수 , (1) 패키지가 어떤 파일을 제어할 수 있는지, (1) 패키지를 사용할 수 있는지, (1) 패키지를 사용할 수 있는지 등 두 방법으로 할 수 mgcv (개체로부터 다른 에 대한 다른 패키지의 . (2) 함수가터개부멀져온체리다로로써으유다지함른니패않다의지키다니습깨지리트패잠로른대으종적재을성속한에지키용됩.mgcv기능.

이것이 네임스페이스를 사용하는 것이 좋은 방법인 이유이며, 현재 CRAN에 의해 시행되는 이유이며, (특히) 사용하는 이유입니다."Imports"사용하는 것보다 안전합니다."Depends".


중요한 주의 사항을 추가하도록 편집되었습니다.

위의 조언에는 유감스럽게도 한 가지 일반적인 예외가 있습니다. 패키지가 패키지에 의존하는 경우입니다.A 자체로"Depends"의 른다러미에꾸에.B는 당의신패첨할야것같다니습어되부는을 첨부해야 할것.A"Depends지시의

패키지의 기능들이 패키지와 그 기능들이 경로에 부착될 것이라는 기대로 작성되었기 때문입니다.

A "Depends"는 패키지를 합니다.A어느 시점에서 패키지.A자신의"Depends"지시는, 연쇄 반응으로, 패키지를 유발할 것입니다.B로드 및 부착할 수 있습니다.A 패키지에서 수 .B그들이 의지하는 것.

안 안"Imports"지시문이 로드되지만 패키지를 첨부하지는 않습니다.A패키지를 로드하거나 첨부하지 않습니다.B. ("Imports"결국, 패키지 작성자가 네임스페이스 메커니즘을 사용하고 있으며, 해당 패키지가A을 사용합니다."Imports"의어기능가위해기리의 어떤 B패액해야합니다키모든의함호함.) 에 의해 됩니다.A패키지의 은 다음과 .B결과적으로 실패합니다.

다음 중 두 가지 솔루션만 사용할 수 있습니다.

  1. 에 패키지를 합니다.A용사를 "Depends"지시의
  2. 하십시오.A그리고 그들에게 네임스페이스를 좀 더 신중하게 구성하도록 요청합니다(이와 관련된 답변에서 Martin Morgan의 말처럼).

Hadley Wickham은 쉽게 설명합니다(http://r-pkgs.had.co.nz/namespace.html) :

패키지를 에 나열하거나 필요할 때 패키지가 설치되었는지 확인합니다.가장 큰 차이점은 어디에서Imports그냥 짐만 싣고,Depends다른 차이점. 차이점은 없습니다. [...]

특별한 이유가 없는 한 패키지는 항상 목록에 표시해야 합니다.이는 좋은 패키지가 자체적으로 포함되어 있으며 글로벌 환경(검색 경로 포함)의 변경을 최소화하기 때문입니다.유일한 예외는 패키지가 다른 패키지와 함께 사용되도록 설계된 경우입니다.예를 들어, 아날로그 패키지는 비건 위에 구축됩니다.채식주의자 없이는 유용하지 않아서 채식주의자가 들어있습니다.DependsImports마찬가지로 ggplot2는 가져오기보다는 척도에 의존해야 합니다.

SfDA의 Chambers는 이 패키지가 '이름 공간' 메커니즘을 사용할 때 '가져오기'를 사용하고 모든 패키지에 해당 이름 공간이 필요하므로 이제는 항상 '가져오기'를 사용하는 것이 정답일 수 있습니다.과거에는 실제로 네임스페이스를 사용하지 않고 패키지를 로드할 수 있었기 때문에 이 경우 종속 항목을 사용해야 했습니다.

다음은 사용할 항목을 결정하는 데 도움이 되는 간단한 질문입니다.

귀하의 패키지를 사용하려면 최종 사용자가 다른 패키지의 기능에 직접 액세스해야 합니까?

  • NO -> 가져오기(가장 일반적인 답변)
  • 예 -> 종속 항목에 따라 다름

'의존'을 사용해야 하는 유일한 경우는 패키지가 다른 패키지의 추가 기능 또는 동반자일 때입니다. 여기서 최종 사용자는 패키지와 '의존' 패키지의 기능을 모두 코드로 사용하게 됩니다.최종 사용자가 사용자의 기능에만 인터페이스하고 다른 패키지가 백그라운드에서 작업만 수행하는 경우 '가져오기'를 대신 사용합니다.

할 점은 ' 예를 들어 " 주할가점 ' 져은에기 ' 키의는경 ' 하이전네 ' 코페구 스가사 가용하 드문여해 것패한참함당입야해는니다다조를수의지키을우스체임추반일으로적지패를오▁the▁syntax▁from것한▁will참,입▁that는야니다다해,▁is▁if▁to,im함조를수▁refer▁to'▁cave▁to▁needdplyr::mutate()단순한 의대에 mutate()그것은 코드를 읽기에 좀 더 투박하게 만들지만, 더 나은 패키지 위생을 위해 지불하기에는 작은 대가입니다.

언급URL : https://stackoverflow.com/questions/8637993/better-explanation-of-when-to-use-imports-depends

반응형