使用"申请"提高R的速度

时间:2014-05-20 22:01:54

标签: r performance for-loop apply

编辑:我编辑了下面的代码以回应你的一些建议(我摆脱了prop.test功能并爬出了第二个地狱圈)。我很好奇接下来的步骤是什么才能让它更快。我应该开始使用应用或并行处理还是别的什么?

我的主要目标是让这个跑得更快。正如我所说的,我对此很陌生,所以我很感激任何建议。谢谢你的帮助!

number.of.trials<-500
n.limit<-1000
final.n.list<-numeric(number.of.trials)

for (trials in 1:number.of.trials){
  p.value<-2
  n<-1
  a<-0
  b<-0

  #this while loop stops once test shows significance or when n reaches the limit
  while ((p.value > .05 | p.value==0) & n<=n.limit) {

    ##add new data points to a and b
    a<-a+rbinom(1, 1, .5)
    b<-b+rbinom(1, 1, .5)

    ##calculate chi-square test statistic with continuity correction
    yates.stat<-2*n*(abs(a*(n-b)-b*(n-a))-n)^2/(n*n*(a+b)*(2*n-a-b)) 

    ##calculate p-value
    p.value<-pchisq(q=yates.stat, df=1, lower.tail=FALSE)
    n<-n+1
  }
  final.n.list[trials]<-n-1
}

解释我尝试使用此代码的内容: 这是对实验的模拟,其中测试两组(a和b)以在整个实验期间连续地观察它们是否显着不同。我想说明传统的p值在这种情况下是如何起作用的。当两组样本量均为1000时(或者实验过程中任何时候组似乎显着不同),实验结束,我重复整个实验500次。

1 个答案:

答案 0 :(得分:2)

您已经获得了一些建议,指出您的循环内容编码的有效性。您是否应该致电rbinom()多次生成单个值?为什么不生成一个大数字,一次说1000个,每个500个,然后通过它们来处理,可能是mapply?您阅读的那些声称效率apply()的人确实非常错误。循环是循环,无论生成为while()for()还是apply()循环。关键是学习使用矢量化策略。