R - 有效地循环通过矩阵

时间:2016-01-27 17:59:39

标签: r loops matrix apply

我有一个矩阵(名为" my_matrix"),有150列(colnames为1,2,3,4,5,6,7,...)和100000行。

我执行以下操作:

missing = c(50,57,60,77,99,101,102,109)

for(i in 1:ncol(my_matrix)) {
  if(colnames(my_matrix)[i] %in% missing) {
    for(j in 1:nrow(my_matrix)) {
        if(grepl('_old$', rownames(my_matrix)[j])){
          my_matrix[j,i] <- my_matrix[gsub("_old", "_new", rownames(my_matrix)[j]),i]
        }
    }
  }
}

此操作正常,并且基本上查看是否在&#34;缺少&#34;中找到列的名称。如果是,则查看行的名称是否以&#34; _old&#34;结尾。如果是这样,则将单元格的值替换为另一个单元格的值(例如,列50和行237478_old的值将替换为列50和行237478_new的值,依此类推。)

不幸的是它很慢并且需要几个小时才能执行完毕。有没有更快的方法来执行此操作(例如使用apply)?

提前致谢!

1 个答案:

答案 0 :(得分:3)

我们创建列的索引(&#39; j1&#39;)和行(对于&#39; new&#39;和旧的&#39;行名称)和提取行/列索引的值,并替换为&#34; new&#34;中的值。行/列值。

 j1 <- colnames(my_matrix) %in% missing
 i1 <- grepl('_old$', rownames(my_matrix))
 i2 <- grepl('_new$', rownames(my_matrix))
 my_matrix[i1,j1] <- my_matrix(i2, j1]