R:将函数应用于矩阵,除了单个单元格

时间:2016-01-14 20:17:18

标签: r indexing

假设我有一个10x10矩阵。如何在排除某些单个单元格的情况下填充0(最好是在单个操作中)?

blank <- matrix(NA,nrow=10,ncol=10)
for (i in 1:10) {for (j in 1:10) {blank[i,j] <- 0 }}
# except blank[2,5], blank[9,3], blank[1,4], to be left NA

2 个答案:

答案 0 :(得分:2)

将矩阵声明为0并将NA s分配给少数异常单元格可能更有效:

blank <- matrix(0, nrow = 10, ncol = 10)
blank[2, 5] <- blank[9, 3] <- blank[1, 4] <- NA

或者,更可编程:

coords <- list(c(2, 5),
               c(9, 3),
               c(1, 4))

blank[do.call("rbind", coords)] <- NA

(关键是?"["的这一部分):

  

当按[索引数组时,单个参数i可以是一个矩阵,其列数与x的维数相同;结果是一个向量,其元素对应于i每行中的索引集。

答案 1 :(得分:1)

如果这应该是NA到零矩阵的随机分配,那么这可能就足够了。

 zero3NA <- matrix(0, 10, 10)
 zero3NA[ cbind( sample(nrow(zero3NA), 3), sample(ncol(zero3NA), 3) ) ] <- NA