我想这样做:
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