我有三个矩阵:
a<-sapply(1:300, function(x) sample(1:100,100*0.8,replace=F))
b<-sapply(1:300, function(x) sample(1:2,100*0.8, replace=TRUE))
c<-matrix(data=NA, nrow=100, ncol=300)
我想分配执行以下任务:
c[,1]
中位于a[,1]
的行并为其分配b [,1]。c[,1:300]
,a[,1:300]
,b[,1:300]
对于一栏,我会这样做:
c[a[,1],1]<-b[,1]
但我想为所有专栏做这件事。
这是否有矢量化解决方案?
答案 0 :(得分:1)
考虑到你试图做的事情,我实际上只是使用for
循环:
set.seed(1)
A <- sapply(1:300, function(x) sample(1:100,100*0.8,replace=F))
B <- sapply(1:300, function(x) sample(1:2,100*0.8, replace=TRUE))
C <- matrix(data=NA, nrow=100, ncol=300)
for (i in 1:ncol(C)) {
C[A[, i], i] <- B[, i]
}
特别是,由于C
已经预先分配,因此速度非常快。