最大4つの異なるタイプで到着するデータを処理するパッケージを構築しています。これらの各タイプは、matrix、data.frame、またはtreeの形式の正当なクラスです。データの処理方法やその他の実験的要因によっては、これらのデータコンポーネントの一部が欠落している場合がありますが、この情報を特別なクラスのインスタンスとして保存し、異なるコンポーネントを認識するメソッドを持つことができると、非常に便利です。データ。
アプローチ1:
ネストされたツリーのように見える増分継承構造を実験しました。データ型の各組み合わせには、明示的に定義された独自のクラスがあります。これを将来追加のデータ型に拡張することは困難であるように思われ、新しい開発者がすべてのクラス名を学習することも困難ですが、それらの名前は適切に編成されている可能性があります。
アプローチ2:
2番目のアプローチは、4つのデータ型すべてのスロットを含む単一の「マスタークラス」を作成することです。欠落データのインスタンスに対してスロットをNULLにできるようにするには、最初にNULL
クラスと新しいデータ型クラスの間に仮想クラスユニオンを定義し、次に仮想クラスユニオンを関連するクラスの期待されるクラスとして使用する必要があるようです。マスタークラスのスロット。次に例を示します(各データ型クラスがすでに定義されていると仮定します)。
################################################################################
# Use setClassUnion to define the unholy NULL-data union as a virtual class.
################################################################################
setClassUnion("dataClass1OrNULL", c("dataClass1", "NULL"))
setClassUnion("dataClass2OrNULL", c("dataClass2", "NULL"))
setClassUnion("dataClass3OrNULL", c("dataClass3", "NULL"))
setClassUnion("dataClass4OrNULL", c("dataClass4", "NULL"))
################################################################################
# Now define the master class with all 4 slots, and
# also the possibility of empty (NULL) slots and an explicity prototype for
# slots to be set to NULL if they are not provided at instantiation.
################################################################################
setClass(Class="theMasterClass",
representation=representation(
slot1="dataClass1OrNULL",
slot2="dataClass2OrNULL",
slot3="dataClass3OrNULL",
slot4="dataClass4OrNULL"),
prototype=prototype(slot1=NULL, slot2=NULL, slot3=NULL, slot4=NULL)
)
################################################################################
したがって、質問は次のように言い換えることができます。
これらのアプローチのいずれかに対して、より効率的および/または柔軟な代替手段はありますか?
この例は、スロットのデフォルト値をNULLに設定することに関するSOの質問への回答から変更されています。この質問は、他のすべての空でない場合に特定の複雑なクラスが必要であるにもかかわらず、必要に応じて空にできるスロットを持つクラスを作成するためのRの最良のオプションを知りたいという点で異なります。