【问题标题】:List built by a loop that overwrites由覆盖的循环构建的列表
【发布时间】:2014-05-25 07:46:39
【问题描述】:

我正在尝试在 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() 作为一种让循环一个一个地遍历所有值的方法,但仍然不起作用。我很抱歉这不是一个新问题,但在阅读了其他人之后,我仍然没有找到解决这个案例的方法。

非常感谢您的帮助!

【问题讨论】:

    标签: r list loops overwrite


    【解决方案1】:

    有几种方法可以做到这一点..

    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)         
        }
      }
    

    【讨论】:

    • 谢谢!现在我看到了错误是。
    • 或者只是Map(c, X, Y)
    猜你喜欢
    • 1970-01-01
    • 2014-09-02
    • 2019-12-12
    • 1970-01-01
    • 2013-09-27
    • 2020-11-21
    • 1970-01-01
    • 2021-01-27
    • 2021-04-06
    相关资源
    最近更新 更多