0

我有三个矩阵:

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)

我想分配执行以下任务:

  1. c[,1]选择其中的那些行a[,1]并将 b[,1] 分配给它们。
  2. 为所有人做这件事c[,1:300],,,a[,1:300]b[,1:300]

对于一列,我会这样做:

c[a[,1],1]<-b[,1] 

但我想对所有列都这样做。

有没有一个矢量化的解决方案?

4

1 回答 1

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已经预先分配,这将非常快。

于 2013-08-27T16:32:03.780 回答