假设我有一个每个部分有不同长度的列表
[[1]
[1] 0 0 0 0 0 0 0 0 0 0
[[2]]
[2] 0 0 0 0
实际上,这个列表每个部分有数百万个元素。
我现在使用两个for循环来填充列表。
i 采用列表的长度(本例中为2)。
j 根据 i 所在的位置显示列表每个部分的长度(此处为10和4)。
for(i in 1:length(testlist)){
for(j in 1:length(testlist[[i]]$ToBeDeleted)){
emptylist2[i] <- paste(testlist[[i]]$ToBeDeleted[j],
testlist[[i]]$ReasonToBeDeleted[j], sep=";")
}}
请尝试忽略变量名称,它们并不重要。
输出不是我想要的。它看起来(在可重现的示例上下文中)是这样的:
[[1]
[1] 0;NA
[[2]]
[2] 0;Na
循环只向列表的每个部分发布了一个“元素”,它们没有填充整个列表。
我希望看到的(数字和文字采用许多不同的值)是:
[[1]
[1] 0;NA 0;test1 0;NA 1;variable 1;etc 0;randomname 0;NA 0;Na 0;nA 0;na
[[2]]
[2] 1;frfrf 0;na 0;na 0;na
这是一个可重复的例子
x <- vector("list", 2)
x[[1]] <- c(0,0,0,0,0,0,0,0,0,0)
x[[2]] <- c(0,0,0,0)
z <- vector("list", 2)
z[[1]] <- c(0,0,1,4,5,6,7,8,9,10)
z[[2]] <- c("a","b","c","d")
emptylist2 <- vector("list", 2)
for(i in 1:length(emptylist2)){
for(j in 1:length(x)){
x[i] <- paste(z[[i]][j], z[[i]][j], sep=";")
}}
正如所指出的那样,通过将x [i]改为x [[i]] [j]来确定