假设我有一个10x10矩阵。我怎样才能用0填充它,同时排除某些单独的单元格(最好在单个操作中)?R:将函数应用于矩阵,除了单个单元格
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
假设我有一个10x10矩阵。我怎样才能用0填充它,同时排除某些单独的单元格(最好在单个操作中)?R:将函数应用于矩阵,除了单个单元格
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和分配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
的每一行中的索引组。
或者你可以使用'blank [cbind(c(2,9, 1),c(5,3,4))] < - NA' –
@docendodiscimus这是更好的(更可编程),我会加入它。谢谢,我的索引技能缺乏。 – MichaelChirico
'do.call(rbind,这个列表/ do.call/rbind操作肯定比看起来更笨拙。 –
如果这应该是NA到零矩阵的随机分配,那么这可能就足够了。
zero3NA <- matrix(0, 10, 10)
zero3NA[ cbind(sample(nrow(zero3NA), 3), sample(ncol(zero3NA), 3)) ] <- NA
为了给你的marix填零,只需做blank [] < - 0'。关于“NA”,这里还是有一些规则,或者只有随机单元?如果没有后面的算法,你可能需要单独做每一个 –
感谢更简单的方法,是的,它们是随机的 – dasf