私はRでS3クラスを書いています。これは、いくつかの属性が付加された単なる整数です。x1とx2がこのクラスのオブジェクト(「myclass」と呼びます)の場合、c(x1、x2)が元のクラス定義と属性をそのままにしたmyclassオブジェクトのベクトルを返すようにします。ただし、文書化されたc()の動作は属性を削除することであるため、独自のc.myclass()メソッドを作成する必要があるようです。私の質問は、どうすればこれを行うことができますか?
問題の例:
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"など)も保持するために、このメソッドをアップグレードする必要もあります。