动态访问空列表或追加到现有列表

时间:2018-12-16 09:53:45

标签: r list

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

我试图形成一个值列表,这样列表的第一个元素就是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)

我在做什么错了?

1 个答案:

答案 0 :(得分:1)

不是最佳解决方案,但可以。我添加了附加条件来检查[[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
    }
}