如何在R中优化循环搜索?

时间:2010-08-06 07:14:34

标签: optimization r loops

我正在尝试使用R中的循环扫描数据集,以查看数据子集中的数据点是否满足某些规则,此处粘贴了一个示例:

loop.ward <- 1
loop.control.chart <- 1
while (loop.ward <= length(unique(control.chart[,"ward"])))
{
   loop.weekly.count <- 3
   while (loop.weekly.count <= nrow(control.chart[control.chart[,"ward"]==unique(control.chart[,"ward"])[loop.ward] ,]))
   {
      temp <- control.chart[control.chart[,"ward"]==unique(control.chart[,"ward"])[loop.ward] ,][(loop.weekly.count-2):(loop.weekly.count),]
      if (nrow(temp[temp["UWL.out"]==1,])>=2 | nrow(temp[temp["LWL.out"]==1,])>=2)
      {
         control.chart[control.chart[,"ward"]==unique(control.chart[,"ward"])[loop.ward],][(loop.weekly.count),"rules.violated"] <- 2
      }
      loop.control.chart <- loop.control.chart + 1
      loop.weekly.count <- loop.weekly.count + 1
   }
   loop.ward <- loop.ward + 1
}

代码正在做我需要的东西,但速度非常慢(我所有病房共有大约7000个数据点(即max(loop.control.chart)= 7000),还有4条扫描规则,我花了10分钟完成了一轮。

我无法想到优化它(我想过tapply,但不知道如何实现它),有什么建议吗?

谢谢!

(还有一个微不足道的问题,这里的代码可读吗?)


更新

部分数据附有here供您参考。

1 个答案:

答案 0 :(得分:1)

你能提供一份数据样本吗?很难将结构与你给出的结构相提并论。我认为plyr可能会有所帮助,但如果没有示例数据,我就不会那么具体。

代码不可读。我明白你在做什么,但它似乎不必要地冗长。它也会出现在你所做的一些事情上,有点被黑客攻击,特别是if条件。还有相当多的重复代码。

我并不是说要严厉,因为我确信代码从你的观点来看是完全合理的。也许它在示例数据中看起来更清晰。