2017-10-20 4 views
1

私はRパッケージで作業していて、特定のライブラリをインポートしています。私は、インポートされたライブラリからクラスを継承するクラスを作成しています。Rでは、パッケージ内のインポートされたクラスのオブジェクトをサブクラス化する方法はありますか?

私の説明では

は私が持っているファイル:私はimportedPackageをインポートしていた場合、私は私のようにそのパッケージから関数を参照する必要が知っている

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

    contains = "classToExtend" 
) 

... 
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が照合操作を実行するには、手動で実行する必要があります。

roxygen2::update_collate(<package name>) 

あなたは、完全にドキュメントを生成したい任意の名前空間の変更が含まれる場合は、ここで

devtools::document(<package name>) 

を使用すると、コレート順を含めて約協議こと、質問です:How do I indicate collate order in Roxygen2?

ここではroxygen2ドキュメントです。 http://roxygen.org/roxygen2-manual.pdf

+0

こんにちはAbhiskehk、あなたの答えのコード部分をフォーマットしてください:https://stackoverflow.com/editing-help –

+0

フォーマットのための提供されたリンクをありがとう。スタックオーバーフローを使用する方法を学ぶ:) –

関連する問題