私が作成した別の関数を使用して、特定の情報が読み込まれた非常に特定の行列を取る関数がいくつかあります。現在、関数が受け入れる行列は、通常の R 行列タイプです。ただし、ユーザーが関数に行列をスローできないように、簡単な入力チェックを実現するために、それらを別の型またはクラスとして割り当てたいと思います。
ネットでいくつかの例を見た後、S3メソッドは簡単だと思いました:
mat1 <- matrix(c(1:10),ncol=5)
colnames(mat1) <- c("ONE","TWO","THREE","FOUR","FIVE")
as.sdpmgdna <- function(x) {
class(x) <- "sdpmgdna"
return(x)
}
mat2 <- as.sdpmgdna(mat1)
これは、mat2 を返すと行列が表示され、indecies mat2[1,2] を介して呼び出すと、適切な値が得られるように見えます。ただし、いくつかの変更があったかどうかはわかりません-sdpmgdna [10]として記述されています。つまり、2つの次元を無視しているように見えますが、上記を実行してmat2を画面に印刷すると、明らかに2つの次元があることが示されます。もう1つの奇妙なことは、私がそうした場合、colnames(mat2)
それらが返されることです. ただし、個々の列の colname を見つけようとすると、たとえばcolname(mat2[,4])
、返される値はNULL
. これがなぜなのか、または私が何をすべきかを誰でも説明できますか?私は本当にそれを基本的にマトリックスにしたいのですが、関数は何をどのくらいの大きさのマトリックスに関して非常に具体的である必要があるため、別のクラスとして定義するとエラーと入力のチェックが非常に簡単になり、R のメソッド メカニズムを使用できるようになり、すべてのカスタム プロット関数を plot() のメソッドにすることができます。