Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 使用;套用;加速_R_Performance_For Loop_Apply - Fatal编程技术网

R 使用;套用;加速

R 使用;套用;加速,r,performance,for-loop,apply,R,Performance,For Loop,Apply,编辑:我根据你的一些建议编辑了下面的代码(我去掉了prop.test函数,爬出了地狱的第二圈)。我很想知道下一步会是什么,以使这更快。我应该开始使用apply或并行处理,还是其他什么 我的主要目标是让这跑得更快。正如我所说,我对这一点还很陌生,所以我非常感谢任何建议。谢谢你的帮助 number.of.trials<-500 n.limit<-1000 final.n.list<-numeric(number.of.trials) for (trials in 1:number

编辑:我根据你的一些建议编辑了下面的代码(我去掉了prop.test函数,爬出了地狱的第二圈)。我很想知道下一步会是什么,以使这更快。我应该开始使用apply或并行处理,还是其他什么

我的主要目标是让这跑得更快。正如我所说,我对这一点还很陌生,所以我非常感谢任何建议。谢谢你的帮助

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
}

number.of.trials您已经收到了一些建议,这些建议指出了您的循环内容编码的有效性。您是否应该调用
rbinom()
多次生成单个值?为什么不生成一个大数字,比如说一次生成1000个,每个500个,然后用
mapply
处理它们呢?你读到的那些声称使用
apply()
提高效率的人其实是大错特错的。循环是循环,无论生成为
while()
for()
apply()
循环。关键是学习使用矢量化策略。

您正在运行什么操作系统?Windows、OSX还是Linux?如果一次性使用多个内核,可以使用
并行
包中的
应用
系列。并行化将是非常不成熟的。首先,你必须爬出……你的下一步可能是编写你自己的、极其精简的
prop.test
版本。里面有很多你可能不需要的原油。乔兰说得对。谢谢@Joran的建议。去掉增长向量会稍微提高速度,而编写方程式(而不是使用prop.test函数)会产生巨大的差异。我在原始帖子中添加了更新版本。我同意。即使是查看
apply
的源代码也令人望而生畏。我在那里没有看到一点C代码/调用,所有的R代码…但我仍然使用它。C代码将在调用
vapply
时发送到
。Internal(vapply,…)