2016-08-31 2 views
0

別のRパッケージでS4クラスと同じ名前のS4クラスを使用/保守する方法は?他のRパッケージのS4クラスと同じ名前のS4クラスを使用/保守する方法は?

私は、 'FeatureSet'という名前のS4クラスを含む大きなRパッケージを書いています。残念ながら、これは広く使われている「オリゴ」パッケージの仮想S4クラスの名前です。私が最初に私のパッケージをロードした後、オリゴ、および

new("FeatureSet") 

を呼び出すと、私はエラーNAMESPACEファイルで

Error in new("FeatureSet") : 
    trying to generate an object from a virtual class ("FeatureSet") 

を取得し、私は「exportClasses」と輸出へ「exportClassPattern」を含む試してみましたこのS4の定義、またはすべてのS4の定義は、私のパッケージから運がない。また、これらのジェネリックのメソッドを私のパッケージに定義しているので、

も含まれています。

同じ名前の複数の定義が添付されている場合、特定のS4定義のみを認識するためのRコードを記述するベストプラクティスの方法はありますか?もちろん、私のクラスに別の名前を付けることもできますが、将来私のクラスが他のパッケージのクラスと衝突しないようにする方法が必要です。私はかなりの時間を通常のフォーラムやドキュメンテーションで見てきましたが、この質問にはどこにも答えられていないことに驚きました。前もって感謝します!

答えて

1

ベストプラクティスは、別のよりわかりやすい名前を選択することです。同じ名前で構造が異なる2つのオブジェクトを持つことは、本質的に混乱します。

あなたはおそらく、単純な「コンストラクタ」関数に包まれ

new(getClass("FeatureSet", where=getNamespace("YourPackage")))` 

を経由して「あなたの」クラスのインスタンスを作成することができます。

原則として、メソッドパッケージは、クラスのインスタンスと別のパッケージの同じ名前のクラスとの違いを知っていますが、あなたとあなたのユーザーを苛立たせるインプリメンテーションのバグにはほとんど間違いありません。

+0

ありがとう、@ Martin-Morgan!私は 'where = getNameSpace(" MyPackage ")'の代わりに 'envir = as.environment(" MyPackage ")'を使うようにしていましたが、上記のようなもので遊んでいました。私は先に進んで、私のパッケージ内のすべてのS4クラス名に接頭辞を追加することに決めました(その多くはFeatureSetのようなかなり一般的な名前を持っています)。 –

関連する問題