矢量化解决方案,按R中的列分配给特定行

时间:2013-08-27 15:58:53

标签: r vectorization

我有三个矩阵:

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]
  3. 执行此操作

    对于一栏,我会这样做:

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

    但我想为所有专栏做这件事。

    这是否有矢量化解决方案?

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已经预先分配,因此速度非常快。