Я пытаюсь написать функцию для оценки бюджета неопределенности на основе метода Монте-Карло. Здесь я расскажу только о том, какой код мне нужно ускорить.Ускорение rnorm in для цикла
inout<-function(var1,svar1,var2,svar2){
M<-10^6
var1m<-matrix(nrow=length(var1),ncol=M)
var2m<-matrix(nrow=length(var2),ncol=M)
j<-1
for (j in 1:length(var1)) {
var1m[j,]<-var1[j]+rnorm(M,0,svar1[j])
var2m[j,]<-var2[j]+rnorm(M,0,svar2[j])
}
var1a<-apply(var1m,1,mean)
var2a<-apply(var2m,1,mean)
return(list(a=round(var1a,digits=1),b=round(var2a,digits=1)))
}
fake1<-cbind(rnorm(200,10,1),rnorm(200,1,0.1),rnorm(200,15,2),rnorm(200,2,0.1))
fake2<-cbind(rnorm(200,5,1),rnorm(200,2,0.1),rnorm(200,150,2),rnorm(200,4,0.1))
inout(var1=fake[,1],svar1=fake[,2],var2=fake[,3],svar2=fake[,4])
Для моей цели это очень важно, чтобы каждый элемент j
из var1
это связано с его rnorm(M,0,svar1[j])
срок.
Спасибо.
AB
Просто просматривая свой код, аргумент 'svar2' не используется нигде (должен' svar2 <-vector (length = length (var1)) 'end in' var2'?). Кроме того, последний аргумент в вашей последней строке (пример использования): вы не определили 'svar2 [, 4]' в любом месте (R должен жаловаться, даже если ваша функция не использует его). –