如何将元素添加到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 <- i
的目的是什么?
代码中的列表在哪里? (即 c() 不是列表)。
@DavidArenburg 出于好奇——当您事先不知道列表的大小时,有没有更好的方法来做到这一点?
c()
将合并数据帧。您将获得一个巨大的数据框,而不是数据框列表
c() 产生一个向量,而不是一个列表:这不会处理很多元素。如果您知道要填充多少个元素,那么内存构建向量的效率也很低。【参考方案2】:
您不应该在循环内使用c
添加到您的列表中,因为这会导致代码非常慢。基本上,当您执行c(l, new_element)
时,会复制列表的全部内容。取而代之的是,您需要按索引访问列表的元素。如果您知道列表的长度,最好使用l <- vector("list", N)
将其初始化为这个大小。如果你不这样做,你可以将它初始化为长度等于某个大数(例如,如果你有迭代次数的上限),然后在循环完成后选择非 NULL 元素。无论如何,基本点是你应该有一个索引来跟踪列表元素并使用它添加例如
i <- 1
while(...)
l[[i]] <- new_element
i <- i + 1
有关更多信息,请查看 Patrick Burns 的The R Inferno(第 2 章)。
【讨论】:
与python
或scala
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中的列表(循环)[重复]的主要内容,如果未能解决你的问题,请参考以下文章