我在R中編寫了一個S3類,它只是一個附加了一些屬性的整數。如果x1和x2是這個類的對象(稱之爲「myclass」),那麼我希望c(x1,x2)返回myclass對象的向量,其原始類定義和屬性保持不變。但是,記錄的c()行爲是去除屬性,所以看起來我需要編寫自己的c.myclass()方法。我的問題是,我該怎麼做?如何在R中編寫自定義S3類的c()函數
問題的一個例子:
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屬性消失了。
綜觀各種封裝的代碼,我有時會看到類似於下面的代碼,在此我們需要保持class屬性,但沒有別的:
c.myclass <- function(..., recursive = F) {
structure(c(unlist(lapply(list(...), unclass))), class="myclass")
}
不幸的是我還不能得到這個工作。調用c.myclass(x1,x2)的結果是一個向量,其矢量本身具有類「myclass」,但向量中的每個項都具有類數字;我真的希望向量中的每個項都具有類「myclass」。在實踐中,我還需要升級此方法以保留其他屬性(如我的類中的屬性「n」)。
謝謝約書亞,你的建議奏效。 – Abiel 2010-11-22 04:37:26