小さな行列から大きな行列を作成しようとしています。大きなR行列を高速に埋め込む方法
のは、私は2人の行列があるとしましょう:
set.seed(1)
mat1 <- matrix(rnorm(100*20),nrow=100,ncol=20)
rownames(mat1) <- paste("R1",1:100,sep=".")
colnames(mat1) <- paste("F1",1:20,sep=".")
mat2 <- matrix(rnorm(200*10),nrow=200,ncol=10)
rownames(mat2) <- paste("R2",1:200,sep=".")
colnames(mat2) <- paste("F2",1:10,sep=".")
私が作成する必要があり、大きな行列がmat1
とmat2
内のすべての行の組み合わせを保持する、と列のその数はncol(mat1)+ncol(mat2)
次のようになります。
combined.rownames <- expand.grid(rownames(mat1),rownames(mat2))
big.mat <- matrix(NA,nrow=nrow(mat1)*nrow(mat2),ncol=ncol(mat1)+ncol(mat2))
rownames(big.mat) <- paste(combined.rownames$Var1,combined.rownames$Var2,sep="_")
mat1
は、1:ncol(mat1)
の列に対応するbig.mat
のすべての行を入力します。
matn
とその寸法は、
mat1
、
mat2
:
idx2 <- match(combined.rownames$Var2,rownames(mat2))
big.mat[,(ncol(mat1)+1):(ncol(mat1)+ncol(mat2))] <- mat2[idx2,]
を現実に私は行列のリストを持っている:
idx1 <- match(combined.rownames$Var1,rownames(mat1))
big.mat[,1:ncol(mat1)] <- mat1[idx1,]
とmat2
は列(ncol(mat1)+1):(ncol(mat1)+ncol(mat2))
でそれに対応big.mat
内のすべての行を移入しますこの例よりも高い。
私の質問は、より高速で効率的な方法であるかどうかです。big.mat
?
私の行列は疎ではありません。