by行列X
としましょう。サイズが byの部分行列を選択すると、これらの次元の行列が返されます。ただし、少なくとも 1と1 が 1 に等しい場合は、代わりにベクトルが取得されます。興味深いことに、 R は、との一方が 0 で、もう一方が 1 でない場合でも、正しい次元の行列を返します。N
D
n
d
n
d
n
d
ここで、 が確実である場合、(ここではと) かどうかに関係なくn!=1
、実行するcbind(X[row.subset,col.subset])
と正しい次元の行列が返されます。であると確信できる場合は、 を使用できます。しかし、との両方が 1 になる可能性がある場合、誤って行を列に変換したり、その逆を行ったりする可能性があるため、どちらのアプローチも機能しません。d==1
n=length(row.subset)
d=length(col.subset)
d!=1
rbind(...)
n
d
私が知る限り、正しい次元の行列を常に取得する 1 つの方法は、 を呼び出すことmatrix(X[row.subset,col.subset],nrow=n,ncol=d)
です。ただし、それが正しい方法であるとは思えません。さらに、パフォーマンスの低下がないという確信もありません。より「ネイティブ」なソリューションはありますか?
これが実際の例です:
N <- 6
D <- 3
X <- matrix(rnorm(N*D),ncol=D)
dim(X[1:2,1:2]) #returns 2 2
dim(X[1:2,1]) #returns NULL, this is a vector
dim(cbind(X[1:2,1])) #returns 2 1
dim(cbind(X[1,1:2])) #returns 2 1, but we'd like it to be 1 2
dim(rbind(X[1,1:2])) #returns 1 2
dim(rbind(X[1:2,1])) #returns 1 2, but we'd like it to be 2 1
row.subset <- 1:4
col.subset <- 2
#I _think_ this is always correct, but it's verbose:
matrix(X[row.subset,col.subset],nrow=length(row.subset),ncol=length(col.subset))
前もって感謝します。