【发布时间】:2017-11-02 10:59:25
【问题描述】:
我正在尝试在for-loop 中创建一个列表,每个步骤都会更新i=1:200。
就我而言,在每个步骤i 我都需要列表元素i+1 和i+2,仅此而已。
我最终会得到一个长度为 202 的列表,我希望这会大大减慢我的计算速度(目前 200 步大约需要 1 小时)。
为了缩短列表,我想删除我不需要的每个列表元素i(即所有 i=i)。
不幸的是,我尝试使用简单地删除 for-loop 中的列表元素
mylist[[i]]<-NULL 或 mylist<-mylist[-i]。两者都可以在循环外正常工作,但不能在循环内工作。这里是一个简单的例子:
mylist<-list()
for (i in 1:3){
mylist[[i+1]]<-c(1:10)*i
mylist[[i]]<-NULL}
mylist
mylist<-list()
for (i in 1:3){
mylist[[i+1]]<-c(1:10)*i
mylist<-mylist[-i]}
mylist
mylist[[i]]<-NULL
mylist<-mylist[-i]
【问题讨论】:
-
“就我而言,在每个步骤 i 中,我都需要列表元素 i+1 和 i+2”,但是您从一个空列表开始?您需要未来的元素,还是过去只需要两次迭代?我不明白您的示例如何与描述匹配。你能只维护一个长度为 2 的列表吗?预期的输出是什么?
-
那么您感兴趣的主要输出只是列表的最后一个元素?
-
@Axeman:感谢您的回复。该示例是一个非常简化的版本来显示问题。在我的例子中,我从 i=1 开始,创建 mylist[[i]],用于确定 mylist[[i+1]] 和 mylist[[i+2]](均在步骤 i 中创建)。我需要在下一步 (i+1) 中使用 mylist[[i+1]],在步骤 i+2 中使用 mylist[[i+2]]。但是,每一步我都需要更新 mylist[[i]]、mylist[[i+1]] 和 mylist[[i+2]],但同时需要前两步的列表。输出是具有不同行和 4 列的矩阵或 data.frame。不确定这是否可行。可能要多虑了。谢谢。
-
@tobiasegli_te:感谢您的回复。我需要在每个步骤 i 中创建的列表的最后两个元素,它们在步骤 i+1 和 i+2 中实现。