私は、RにS3クラスを書いています。 x1とx2がこのクラスのオブジェクト( "myclass"と呼びます)であれば、元のクラス定義と属性をそのまま使用してmyclassオブジェクトのベクトルを返すことができます。しかし、c()の文書化された動作は属性を削除することです。したがって、独自のc.myclass()メソッドを記述する必要があるようです。私の質問は、私はこれをどうすればできるのですか?カスタムS3クラスのc()関数を書く方法R
問題の例:
myclass <- function(x, n) structure(x, class="myclass", n=n)
x1 <- myclass(1, 5)
x2 <- myclass(2, 6)
c(x1, x2)
[1] 1 2
ここ
結果は、ちょうど数値クラスの項目のベクトル、およびオリジナルのn個の属性がなくなっています。
c.myclass <- function(..., recursive = F) {
structure(c(unlist(lapply(list(...), unclass))), class="myclass")
}
残念ながら、私もこれを動作させることはできません。
さまざまなパッケージのためのコードを見てみると、私は時々私たちはクラス属性が、他には何を維持する必要がある中で、次のようなコードを参照してください。 c.myclass(x1、x2)を呼び出した結果は、ベクトル自体がクラス "myclass"を持ちますが、ベクトルの各項目はクラスnumericを持ちます。私は本当にベクトルの各アイテムにクラス "myclass"が必要です。実際には、他の属性も保持するためにこのメソッドをアップグレードする必要があります(myclassの属性 "n"など)。
ありがとう、ジョシュア、あなたの提案が働いた。 – Abiel