我在访问动态形成的列表时遇到问题。
我试图形成一个值列表,这样列表的第一个元素就是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)
我在做什么错了?
答案 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
}
}