如何将元素添加到R中的列表(循环)[重复]

Posted

技术标签:

【中文标题】如何将元素添加到R中的列表(循环)[重复]【英文标题】:How to add elements to a list in R (loop) [duplicate] 【发布时间】:2014-12-17 23:10:55 【问题描述】:

我想在一个循环中向列表中添加元素(我不知道具体有多少)

像这样:

l <- list();
while(...)
   l <- new_element(...);

最后,l[1] 将是我的第一个元素,l[2] 我的第二个元素等等。

你知道该怎么做吗?

【问题讨论】:

在循环中增长对象(并使用while 循环)不是 R 中推荐的技术。什么决定了元素的数量? 也许也值得看看这篇文章***.com/questions/14455051/… 你的列表 [[ (length(yourlist) + 1) ]] 【参考方案1】:

以下内容在循环中将元素添加到向量中。

l<-c()
i=1

while(i<100) 
    
    b<-i
    l<-c(l,b)
    i=i+1

【讨论】:

循环中b &lt;- i的目的是什么? 代码中的列表在哪里? (即 c() 不是列表)。 @DavidArenburg 出于好奇——当您事先不知道列表的大小时,有没有更好的方法来做到这一点? c() 将合并数据帧。您将获得一个巨大的数据框,而不是数据框列表 c() 产生一个向量,而不是一个列表:这不会处理很多元素。如果您知道要填充多少个元素,那么内存构建向量的效率也很低。【参考方案2】:

您不应该在循环内使用c 添加到您的列表中,因为这会导致代码非常慢。基本上,当您执行c(l, new_element) 时,会复制列表的全部内容。取而代之的是,您需要按索引访问列表的元素。如果您知道列表的长度,最好使用l &lt;- vector("list", N) 将其初始化为这个大小。如果你不这样做,你可以将它初始化为长度等于某个大数(例如,如果你有迭代次数的上限),然后在循环完成后选择非 NULL 元素。无论如何,基本点是你应该有一个索引来跟踪列表元素并使用它添加例如

i <- 1
while(...) 
    l[[i]] <- new_element
    i <- i + 1

有关更多信息,请查看 Patrick Burns 的The R Inferno(第 2 章)。

【讨论】:

pythonscala for() yield 生成器相比,这非常痛苦/冗长。将继续希望/寻找一些 R 结构,从而减少我的工作量.. @javadba 我不确定你的意思。如果你用for 替换问题中的while 循环,你会得到一个类似于python for 循环的for 循环。如果您在 python 中使用了while 循环,您还需要显式调用和递增i。如果您特别提到 python generators,base R 不提供此功能(iterators 包具有类似的功能,但工作方式并不完全相同)。 我确实在评论中说generators创建 迭代变量和自动增量的构造将是“不错的”而不是上述构造 - 尽管在其他语言中可能不会被首选。会看iterators @javadba 有一个构造可以让您初始化变量并自动递增,它是 for 循环,例如for (i in 1:10) print(i),或者我误解了这个问题。 是的,这就是我要找的东西:这里有更多描述www3.nd.edu/~steve/computing_with_data/21_looping/…

以上是关于如何将元素添加到R中的列表(循环)[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在R中循环中的最后一个元素之后附加到列表?

将循环中的 BigInteger 添加到列表 [重复]

python如何将列表中的元素添加进字典

将for循环中的字符串值添加到列表中[重复]

如何将整数添加到列表中的每个元素?

如何删除此列表中的重复元素?