假设我有一个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
答案 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