【发布时间】:2015-11-22 16:46:54
【问题描述】:
我正在尝试运行一个代码,以寻找超过 20 年的流行病学数据的最佳预测措施。我正在优化模型超过 7 个常量,所以我的代码如下所示:
correcttot<-function(v,p,r){
correct3<-array(0,dim=c(10,10,10,10,10,10,10))
for(i in 1:10){
for(j in 1:10){
for(k in 1:10){
for(l in 1:10){
for(m in 2:10){
for(n in 2:10){
for(o in 1:10){
correct3[i,j,k,l,m,n,o]<-percentcorrect((i/10),(j/10),(20*k),(20*l),m,n,o,v,p,r)
}
}
}
}
}
}
}
print(correct3)
}
但这和糖蜜一样慢(大约需要 35 小时)。我知道在许多情况下 apply() 是比 for 循环更好的选择,但是在这种情况下有什么方法可以使用它吗?那会是什么样子?该函数(百分比正确)采用七个常数,然后是我的数据集 v、p、r 中的三个向量。该功能不是特别快,但这仍然需要非常非常长的时间。
非常感谢您。
【问题讨论】:
-
这相当于 1000 万次正确调用。一个电话需要多长时间(或者说 10 个)?
lapply不会变魔术。一天只有 86,400 秒。 -
一个调用大约需要 7 秒。所以这只是一个愚蠢的差事?
-
它应该花费比 35 小时更长的时间。 7000 万秒等于 810 天,即 2.2 年。某些参数不能花很长时间。
-
是的,如果结果是 NA 或 0,它就不会继续运行,其中很多都是。这是单次运行时 system.time 的读数 system.time(percentcorrect(.3,.4,40,100,10,5,4,v,s,p)) user system elapsed 5.141 0.028 5.241
-
如果您发布更多代码,也许我们可以帮助优化。或者只是将 geofurbs 的答案标记为正确(他需要积分)并优化自己。顺便说一句,代码审查最好发布在该名称的 StackExchange 论坛上。
标签: r for-loop optimization apply