Я хотел бы ускорить приведенное ниже моделирование методом Монте-Карло оценки 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
может работать быстрее, чем цикл for, а может и нет; это зависит от того, что вы делаете. Вам нужно профилировать свой код на скорость, чтобы увидеть, какие части самые медленные (см.?Rprof
), тогда вы будете знать, что должно быть быстрее. Люди могут помочь профилировать ваш код, если вы предоставите воспроизводимый пример. - person Joshua Ulrich   schedule 29.11.2012banks
? - person Roman Luštrik   schedule 30.11.2012