次のコードを検討してください。
A <- matrix(1:12, ncol=4)
colnames(A) <- letters[1:4]
class(A) <- c("foo", "matrix")
Aがサブセットの場合、「foo」クラスラベルが失われます。
class(A[1:2,])
# [1] "matrix"
同じことがベクトルでも起こります。ただし、data.framesでは同じことは起こりません。
B <- as.data.frame(A)
class(B) <- c("foo", "data.frame")
class(B[1:2,])
# [1] "foo" "data.frame"
そして通常、ジェネリック関数をオブジェクトに適用すると、クラス属性が保持されます。行列/数値/整数オブジェクト用ではありません。なんで?そして、この動作を回避できますか?