2017-10-20 14 views
1

저는 R 패키지를 만들고 특정 라이브러리를 가져오고 있습니다. 나는 가져온 라이브러리에서 클래스를 상속받는 클래스를 만들고 있습니다. 내 설명에R에서 내 패키지에있는 가져온 클래스의 객체를 어떻게 서브 클래스화할 수 있습니까?

내가 가진 파일 :

setClass("mySampleClass", 
    slots = list(
     numUp = "numeric", 
     numDown = "numeric" 
    ), 

    contains = "classToExtend" 
) 

내가 importedPackage을 수입하고있는 경우는, 내가 그 패키지로에서 함수를 참조 할 필요가 알고

... 
Imports: 
    importedPackage 

가 그럼 난 클래스 선언이 importedPackage::someFunction(). 내 클래스 선언에 contains = 부분이 있지만 여기서는 할 수 없습니다. 지금은 빌드시에 알려줍니다.

Error in reconcilePropertiesAndPrototype(name, slots, prototype, superClasses, : 
    no definition was found for superclass “importedPackage::classToExtend” in the specification of class “mySampleClass” 

나는이를 수정하는 몇 가지 방법을 시도했습니다. 그것은 누군가가 전에 직면 했어야하는 문제의 종류처럼 보이지만, 지금까지 Google에 의해 이것을 올바르게 행하는 방법을 찾을 수 없습니다. 사전에 도움을 주셔서 감사합니다.

+1

그래서 나는 S4를 많이하지 않으므로 이것은 추측이지만이 QA의 첫 번째 답변에서 말하는 것을 시도해 보셨습니까? https://stackoverflow.com/questions/37897002/include-an-s4-object-from-an-existing-package-as-a-slot-in-a-new-s4-class 그것은 당신의 쟁점도 돌봐 줄 것 같네요? – HFBrowning

+0

흥미롭게도 그 질문은 제가 가져 오려고하는 패키지와 정확히 같습니다. 나는 그것의 여러 변형을 시도했다. 문서화 한 다음 제대로 빌드하는 것처럼 보이지만 빌드 직후에'library (MyLib)'를 실행하면 정상적으로 보이지만 다음 번에 치명적인 오류가 발생하면 어디에서나 클릭합니다. –

답변

0

나는 동일한 문제가있었습니다. 상속 관계가있는 S4 클래스가 있고 클래스가 다른 .R 파일에있는 경우 수퍼 클래스 (classToExtend)가 들어있는 파일을 서브 클래스 (mySampleClass) 전에로드해야합니다. 이것은 당신이 mySampleClass 파일의 문서 패키지를 roxygen2 사용하여 수행 할 수 있습니다

#' @include <file name containing classToExtend definition> 

이것은 기본적으로 해당 파일이 아닌 아래 다음에 바로 코드 라인에 적용되는 것을 의미한다.

이렇게하면 기본적으로 DESCRIPTION 파일에 조합 필드가 만들어지고 종속성이 먼저 나열됩니다.

마지막으로 roxygen이 조합 작업을 수행하려면 수동으로 실행해야 할 수 있습니다. 여기 How do I indicate collate order in Roxygen2?

roxygen2 문서입니다 :

roxygen2::update_collate(<package name>) 

완전히 문서를 생성 할 경우, 어떤 네임 스페이스 변경 후 여기에

devtools::document(<package name>) 

이 한 부씩 인쇄 순서를 포함하여 약 회담 것이 문제이다 사용을 포함한다 : http://roxygen.org/roxygen2-manual.pdf

+0

안녕하세요 Abhiskehk, 답변의 코드 부분을 포맷하십시오. https://stackoverflow.com/editing-help –

+0

서식 지정 링크에 감사드립니다. 스택 오버플로 사용법 배우기 :) –