我怎样才能避免这种循环? (R)

时间:2016-02-09 22:38:00

标签: r for-loop apply

我目前有一个for循环,如下所示,并没有像我希望的那样快。

library(dplyr)

DF<-data.frame(Name=c('Bob','Joe','Sally')) #etc

PrimaryResult <- Function1(DF)
ResultsDF<-Function2(PrimaryResult)

for(i in 1:9) 
{
  Filtered<-filter(DF,Name!=PrimaryResult[i,2])
  NextResult <- Function1(Filtered)
  ResultsDF<-rbind(ResultsDF,Function2(NextResult))
   }

代码获取Function1的初始结果(名称列表)并再次尝试,初始结果中的每个名称将被单独排除,以提供替代结果。它们通过Function2作为一行数据帧返回,并附加到结果数据框。

如何让它更快?

1 个答案:

答案 0 :(得分:0)

似乎您的主要问题是每次迭代rbind时函数2的附加结果。这通常很慢,因为你告诉R在每个时间步重写一堆信息,R并不真正知道你最终会有多大的矢量。

尝试将结果放入列表向量中。我真的不知道你的功能是做什么的,所以我无法真正帮助这部分。

results_list <- vector("list", 10)
results_list[[1]] <- Function2(PrimaryResult)

for(i in 1:9){
  Filtered<-filter(DF,Name!=PrimaryResult[i,2])
  NextResult <- Function1(Filtered)
  results_list[[i+1]]<-rbind(results_list[[i]],Function2(NextResult))
   }

这并不完美,但它应该加快速度。