假设我有一个名为remove_fun
的函数,它根据某些条件减少了数据帧的行数(此函数过于冗长,无法包含在此问题中)。此函数将具有2列的数据帧作为其输入。例如,名为block_2_df
的输入df看起来像这样:
block_2_df
Treatment seq
1 29
1 23
3 60
1 6
2 41
1 5
2 44
对于这个例子,假设函数remove_fun
基于block_2_df $ seq中seq的最高值一次删除1行。应用remove_fun
一次会产生一个如下所示的新数据框:
remove_fun(block_2_df)
Treatment seq
1 29
1 23
1 6
2 41
1 5
2 44
即,block_2_df
中包含seq == 60的行已通过remove_fun
删除
我可以创建一个while循环,根据block_2_df
中剩余的行数,通过remove_fun
在block_2_df
上重复此操作:
while (dim(block_2_df)[1]>1) {
block_2_df <- remove_fun(block_2_df)
print(remove_fun(block_2_df))
}
此while循环会减少block_2_df
,直到剩下1行(block_2_df$seq
的最低值),然后打印出block_2_df
的“已更新”版本,直到减少为1行。
但是,我想保存block_2_df
的每个“更新”版本(即block_2_df
,其中包括7,然后是6,然后是5,....,然后是1行) while
循环。我怎么能做到这一点?我知道对于for
循环,可以通过在空列表中的block_2_df
元素中存储每个“已更新”ith
时创建一个空列表来完成。但是我不确定如何在while
循环中做类似的事情。将dfs列表作为此while
循环的输出会很棒。
答案 0 :(得分:3)
自己创建和维护索引计数器。它比for()
循环更麻烦,它可以独立完成,但它并不那么困难。
saved <- list()
i <- 1
while (dim(block_2_df)[1]>1) {
block_2_df <- remove_fun(block_2_df)
saved[[i]] <- block_2_df
i <- i + 1
print(block_2_df)
}
另外,你在循环中调用remove_fun
两次,这可能不是你想要做的。我已经纠正了,如果我错了,请说出来。