如果我想在循环中跟踪id:s,在列向量中存储该信息的便捷方法是执行类似...
res <- array(NA,
dim = c(length(unique(id)),2),
dimnames = NULL)
for (i in 1:3) {
res[i,1] <- i
}
...这给了我类似的东西:
i | - |
---| --|
1 | |
2 | |
3 | |
现在,我想为嵌套循环做同样的事情,所以我尝试了:
res <- array(NA,
dim = c(length(unique(id)*c(length(unique(t)),2),
dimnames = NULL)
for (i in 1:3) {
for (j in 1:3) {
res[i,1] <- i
res[j,2] <- j
}
}
但结果是:
i | j |
---| --|
1 | 1 |
2 | 2 |
3 | 3 |
显然这不是我想要的。相反,它应该是3 * 3行,如下所示:
i | j |
---| --|
1 | 1 |
1 | 2 |
1 | 3 |
2 | 1 |
2 | 2 |
2 | 3 |
3 | 1 |
3 | 2 |
3 | 3 |
我如何得到这个?
答案 0 :(得分:1)
有点hacky,但我认为这应该运行良好,特别是当你的迭代器可能变成整数以外的东西时:
id <- 1:9
res <- array(
data = NA,
dim = c(length(id), 2),
dimnames = list(c(), c('i','j')))
k = 0
for (i in 1:3) {
for (j in 1:3) {
k = k+1
res[k,1] <- i
res[k,2] <- j
}
}
输出:
> res
i j
[1,] 1 1
[2,] 1 2
[3,] 1 3
[4,] 2 1
[5,] 2 2
[6,] 2 3
[7,] 3 1
[8,] 3 2
[9,] 3 3
答案 1 :(得分:0)
在您的示例中,您依靠i
作为索引。由于您只有i
的三次迭代,因此i
的所有值都将被覆盖,而j
的值将不断被覆盖。
使用专用索引(ix
)解决了这个问题。
这应该做你想要的:
res <- data.frame(i=NULL,j=NULL)
ix <- 0
for (i in 1:3){
for (j in 1:3){
ix <- ix+1
res[ix,1] <- i
res[ix,2] <- j
}
}
输出:
> res
V1 V2
1 1 1
2 1 2
3 1 3
4 2 1
5 2 2
6 2 3
7 3 1
8 3 2
9 3 3