Rでは、その逆です。行列はベクトルです。マトリックスのような動作は、オブジェクトのアトミックベクトル部分の上にあるいくつかの追加の属性に由来します。
dim()必要な動作を得るには、または明示的な強制を使用してベクトルに次元を設定することにより、ベクトルを行列にする必要があります。
> vm <- 1:5
> dim(vm) <- c(1,5)
> vm
[,1] [,2] [,3] [,4] [,5]
[1,] 1 2 3 4 5
> class(vm)
[1] "matrix"
次に、サブセット化するときに寸法を維持する必要があります。デフォルトでは、Rは空のディメンションをドロップしますvm。上記の場合は行のディメンションです。drop = FALSEの呼び出しで使用してそれを行います'['()。デフォルトの動作は次のdrop = TRUEとおりです。
> vm[, 2:4]
[1] 2 3 4
> vm[, 2:4, drop = FALSE]
[,1] [,2] [,3]
[1,] 2 3 4
行列にクラスを追加し[、引数がデフォルトdropで設定されているそのクラスのメソッドを作成できます。FALSE
class(vm) <- c("foo", class(vm))
`[.foo` <- function(x, i, j, ..., drop = FALSE) {
clx <- class(x)
class(x) <- clx[clx != "foo"]
x[i, j, ..., drop = drop]
}
使用中は次のようになります。
> vm[, 2:4]
[,1] [,2] [,3]
[1,] 2 3 4
つまり、空の次元を維持します。
これを誰にでもできるように普及させるには、さらに多くの努力が必要になりますが、上記の方法で始めることができます。