いくつかの拡張(追加機能、追加プロパティ)を備えたかなりのデータフレームであるクラスを作成したいと思います。方法はそれです。クラスは基本的にはデータフレームですが、データフレームのスキーマ(以下、「フォーム」という名前が付けられ、データフレームとして表現され、データフレームを正しいタイプにキャストするために使用される)などのいくつかの追加の属性があります。その他いくつかのことがあります。ユーザーが特別な型を認識しない他の関数でこのオブジェクトを使用する場合、私はそれらのオブジェクトのdata.frame部分を処理する必要があります。これを行う最善の方法は何ですか?追加機能付きdata.frameのサブクラスを作成する方法
私が見つけた2つの方法は両方とも不満足です。私はそれらを列挙し、私がまだ見ている問題と解決しようとしている問題は何か?質問は、私がやろうとしていることをする最善の方法は何ですか?
fd$x >> 1 2
names(fd) >> "x"
[更新:
方法1は、この方法では、私はのようなものを行うことができます(inspired by this SO post)
setClass("formhubData", representation(form="data.frame"), contains="data.frame")
fd <- new('formhubData', data.frame(x=c(1,2)), form=data.frame(name='x', type='select one', label='X'))
"ベース" スロットとして "data.frame" を使用判明します私の環境では、setClass( 'formhubData'、...)を異なる引数で繰り返し呼び出していたため、「ブレークダウン」が発生していました。新鮮Rのセッションでは、予想通り、以下のすべての機能が動作]
しかし、それはかなり迅速に破壊する:上記のリンクポストとは異なり
nrow(fd) >> NULL
colnames(fd) >> NULL
を、でもシンプルなis.data.frame
が機能しません私
is.data.frame >> FALSE
方法2、(SPに触発) "データ" スロット
を使用fd$x >> NULL
names(fd) >> integer(0)
しかし、少なくとも私はそれらのほとんどは(まだ[、[、などについて学ぶことがあります)を再定義することができます:
dim.formhubData <- function(x) dim([email protected])
names.formhubData <- function(x) names([email protected])
nrow(fd) >> 2
names(fd) >> "x"
私はデフォルトの定義を失います
しかし、data.frameをとるどのメソッドでも、自分のクラスを@dataスロットへのパススルーとして使用する必要があるという事実を表現できないようです。私は
はこのような何かを達成するための任意の方法がありますなど、むしろ私のクラスのクライアントが使用する可能性のあるすべての機能を推測しようとするよりも*.formhubData <- function(x, ...) *(x, ...)
のようなものの必要性を感じ、そしてdim.formhubData
、names.formhubData
のようにそれらを定義しますか?
方法1の「nrow」と「colnames」は、「R version 3.0.0 Patched(2013-04-15 r62590)」の下で私のために働いています。 –
MartinとR 2.15.2と同じ結果が得られました。また、 'is.data.frame(fd)'が 'TRUE'となりました。しかし、方法2では 'fd'も表示されません! – Frank
さて、同じことをお二人ともお話した後、私は新鮮なRセッションでテストしましたが、今でも良い結果が得られています。多分、RはsetClassを同じ 'formhubData'で何度も呼び出すことを扱っていないでしょう。それが私のことです。 – prabhasp