Ich möchte ein montecarlo-Resampling-Schema unter Verwendung der Multicore-Funktion des foreach-Pakets in Kombination mit Paket doMC unter Verwendung einer LINUX-Maschine durchführen. Bei jeder Iteration wird eine selbst erstellte Funktion erneut mit Ersatzdaten in data.frame X
abgetastet. Als Ergebnis erhalte ich einen neuen data.frame X.i
, der das Pseudo-Sample enthält, das als Eingabedaten in einen Optimierungsprozess unter Verwendung von nlminb()
(Zielfunktion = F_1
) verwendet wird. Ich habe kein Problem mit dem Standard for()
Befehl:nlminb() erkennt Eingabedaten nicht, wenn in foreach() eingebettet
B=10 # number of iterations in the for(), foreach() loops
ll<-numeric(B) # vector containing the objective value from nlminb() at iteration i.
for (i in 1:B){
X.i<-f_bwhv(X,resampling=T)
ll[i]<-nlminb(par,F_1,X.i=X.i)$objective
}
ll
[1] 55160.06 65839.87 50232.35 74536.11 73489.52 80321.76 61646.76 61899.84 76774.73 74138.7
Allerdings bin ich nicht in der Lage foreach()
anzuwenden, da es scheint, dass nlminb()
nicht die Eingabedaten X.i
, erkennt oder zumindest nicht schafft es nicht in die gleiche Art und Weise wie bei der eingebettet in for()
:
doMC::registerDoMC(cores=2)
ll.foreach<-foreach(i=1:B,.packages = c("stats","plyr"),.combine = c) %dopar% {
X.i<-f_bwhv(X,resampling=T)
nlminb(par,F_1,X.i=X.i)$objective
}
Error in { : task 1 failed - "object 'X.i' not found"
ich weiß nicht, wo das Problem ist, aber ich denke, es ist etwas speziell mit wie foreach()
und nlminb()
interact gerecht sein müssen, denn wenn ichlaufenmit einer einfachen Funktion kann sagen, misst die Anzahl der Zeilen in Xi, habe ich überhaupt kein Problem:
nrows.foreach<-foreach(i=1:B, .packages = c("stats","plyr"), .combine = c) %dopar% {
X.i<-f_bwhv(X,resampling=T)
nrow(X.i)
}
nrows.foreach
118 118 116 116 118 117 116 115 108 113
ich mit dem foreach
Paket nicht vertraut bin, und ich konnte keine Lösung in der finden Pakethilfe, daher würde ich mich sehr über Ihre Vorschläge freuen.
Früher habe ich hier:
R Version 3.3.0 (2016.05.03); DoMC Version 1.3.4; foreach Version 1.4.3; Plattform: x86_64-pc-linux-gnu (64-bit)