首页 > 解决方案 > 动态访问空列表或附加到现有列表

问题描述

我在访问动态形成的列表时遇到问题。

我正在尝试形成一个值列表,使得列表的第一个元素是 的第一个元素x,并且在每次迭代中,如果列表的长度已经是 3 或者它已经包含 x 的任何元素,则形成一个列表的新元素。总共要进行 5 次。但是,下面循环的第一行for不起作用,尽管我尝试了[[]][](下面**中的部分)的不同组合 - 它一直告诉我我无法访问列表的元素。

我的代码如下:

x = c(1,2)
GROUP <- list()
j=1
k=1
for (i in 1:5) {
  **GROUP[[k]][[j]] = i**
  if (length(GROUP[[k]]) == 3 | (any(x %in% GROUP[[k]]))) {
    k = k + 1
  } else {
    j = j + 1
  }
}

预期的输出是

GROUP[[1]] = 1
GROUP[[2]] = 2
GROUP[[3]] = c(3,4,5)

我究竟做错了什么?

标签: rlist

解决方案


不是最佳解决方案,但有效。我添加了额外的条件来检查是否[[k]]存在。如果它已经存在,则i附加。

x <- 1:2
GROUP <- list()
j <- 1
k <- 1

for (i in 1:5) {
    # Check the length of current list
    if (length(GROUP) < k) {
        # Creates are new vector
        GROUP[[length(GROUP) + 1]] <- i
    } else {
        # Appends to existing vector
        GROUP[[k]] <- append(GROUP[[k]], i)
    }
    if (length(GROUP[[k]]) == 3 | any(x %in% GROUP[[k]])) {
        k <- k + 1
    } else {
        j <- j + 1
    }
}

推荐阅读