如何将矩阵元素分配到R中的列表中的索引?

  • 本文关键字:列表 索引 分配 元素 r
  • 更新时间 :
  • 英文 :


我想这样做:

A = matrix(0, nrow = 3, ncol = 8)
for (ind in list(c(1,2), c(2,3), c(1,6), c(2,7), c(3,8))){
# print(ind)
A[ind] = 1
}

打印ind给了我我所期望的(行1, 2然后2,3等等),但运行此循环后A是:

> A
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
[1,]    1    0    1    0    0    0    0    0
[2,]    1    0    1    0    0    0    0    0
[3,]    1    1    0    0    0    0    0    0

我真的不知道为什么。

另一个选项,同样的前提。

A <- matrix(0, nrow = 3, ncol = 8)
lst <- list(c(1,2), c(2,3), c(1,6), c(2,7), c(3,8))
A[t(list2DF(lst))] <- 1
A
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
[1,]    0    1    0    0    0    1    0    0
[2,]    0    0    1    0    0    0    1    0
[3,]    0    0    0    0    0    0    0    1

要回答为什么循环不起作用的问题,需要对索引进行转置。

A = matrix(0, nrow = 3, ncol = 8)
for (ind in list(c(1,2), c(2,3), c(1,6), c(2,7), c(3,8))){
# print(ind)
A[t(ind)] = 1
}

你可以这样做:

A[do.call(`rbind`, lst)] <- 1
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
[1,]    0    1    0    0    0    1    0    0
[2,]    0    0    1    0    0    0    1    0
[3,]    0    0    0    0    0    0    0    1

最新更新