【发布时间】:2012-11-29 15:31:44
【问题描述】:
我想加快 DEA 估计的以下蒙特卡罗模拟
A<-nrow(banks)
effm<-matrix(nrow=A, ncol=2)
m<-20
B<-100
pb <- txtProgressBar(min = 0,
max = A, style=3)
for(a in 1:A) {
x1<-x[-a,]
y1<-y[-a,]
theta=matrix(nrow=B,ncol=1)
for(i in 1:B){
xrefm<-x1[sample(1:nrow(x1),m,replace=TRUE),]
yrefm<-y1[sample(1:nrow(y1),m,replace=TRUE),]
theta[i,]<-dea(matrix(x[a,],ncol=3),
matrix(y[a,],ncol=3),
RTS='vrs',ORIENTATION='graph',
xrefm,yrefm,FAST=TRUE)
}
effm[a,1]=mean(theta)
effm[a,2]=apply(theta,2,sd)/sqrt(B)
setTxtProgressBar(pb, a)
}
close(pb)
effm
一旦 A 变大,模拟就会冻结。我从在线研究中了解到,apply 函数可以快速加速此类代码,但不确定如何在上述过程中使用它。
任何帮助/指导将不胜感激
巴里
【问题讨论】:
-
网上有很多错误信息。
apply函数可能比 for 循环快,也可能不快;这取决于你在做什么。您需要分析代码的速度以查看哪些部分最慢(请参阅?Rprof),然后您就会知道哪些部分需要更快。如果您提供reproducible example,人们可以帮助分析您的代码。 -
@JoshuaUlrich 同上!此外,如果您可以发布您正在使用的部分数据,我们将能够实际运行您的代码,从而更容易提供帮助
-
你能定义“冻结”吗?需要很长时间的进程与耗尽系统内存(或其他东西)并挂起进程和/或整个操作系统的进程之间存在很大差异。
-
如果我们可以在本地运行此代码将会很有帮助。
banks是什么?
标签: r nested-loops montecarlo