由覆盖的循环构建的列表

时间:2014-04-11 08:49:57

标签: r list loops overwrite

我正在尝试在R中生成由50个元素组成的列表。在每个元素中应该是以下列方式的一对数字: [[1]] 14 64 [[2]] 15 65 ... [[50]] 63 113

我已经尝试过编写这个循环,但是出现了一些问题,我无法弄明白:

cons<- list()
for (k in seq(1:50)){
  for (i in 14:63){
    for (j in 64:113){
      cons[[k]] <- c(i,j)         
    }
  }
}

我还尝试使用seq(lenght())seq_along()作为循环逐个遍历所有值的方法,但仍然不起作用。我道歉这不是一个新问题,但在阅读完其他人后,我仍然没有找到解决此案的方法。

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

有很多方法可以做到这一点..

X <- 14:63
Y <- 64:113
lapply(1:50, FUN = function(i) c(X[i], Y[i]))
## [[1]]
## [1] 14 64
## 
## [[2]]
## [1] 15 65
## 
## ....
## ....
## ....
## 
## [[50]]
## [1]  63 113

mapply(FUN = function(x,y) {c(x,y)}, x = 14:63, y = 64:113, SIMPLIFY=FALSE)

或使用普通循环

X <- 14:63
Y <- 64:113
cons<- list()
for (k in seq(1:50)){
    cons[[k]] <- c(X[k],Y[k])         
}

OP代码中的错误是跟随创建50 * 50次迭代。所以生成的对是c(14,64), c(14,65) ... c(63,112), c(63,113)。只有前50个被列入清单。这个过程只重复了50次。

for (i in 14:63){
    for (j in 64:113){
      cons[[k]] <- c(i,j)         
    }
  }