Ich bin begeistert von dem parallel
Paket in R und wie einfach und intuitiv zu tun, ist es parallele Versionen von apply
, sapply
usw.einfachste Weg parallel replizieren
Gibt es eine ähnliche Parallelfunktion für replicate
zu tun?
Ich bin begeistert von dem parallel
Paket in R und wie einfach und intuitiv zu tun, ist es parallele Versionen von apply
, sapply
usw.einfachste Weg parallel replizieren
Gibt es eine ähnliche Parallelfunktion für replicate
zu tun?
Sie können nur die parallelen Versionen von lapply
verwenden oder sapply
, anstatt zu sagen, dieser Ausdruck zu replizieren n
mal Sie gelten die auf 1:n
und stattdessen Wenn Sie einen Ausdruck angeben, umbrechen Sie diesen Ausdruck in einer Funktion, die das an ihn gesendete Argument ignoriert.
möglicherweise so etwas wie:
#create cluster
library(parallel)
cl <- makeCluster(detectCores()-1)
#get library support needed to run the code
clusterEvalQ(cl,library(repsych))
#put objects in place that might be needed for the code
clusterExport(cl,c("myData"))
#... then parallel replicate...
parSapply(cl, 1:10000, function(i,...) { x <- rnorm(10); mean(x)/sd(x) })
#stop the cluster
stopCluster(cl)
als parallel Äquivalent:
replicate(10000, {x <- rnorm(10); mean(x)/sd(x) })
Dies ist das Beste, was ich tun konnte:
cl <- makeCluster(getOption("cl.cores", 4))
clusterCall(cl, replicate(50, simulate_fxns()))
stopCluster(cl)
'clusterCall' für jeden Arbeitnehmer in einem Cluster eine Funktion einmal ausgeführt wird, eine Liste mit, dass viele Elemente zurück. Das scheint mir nicht viel zu "replizieren". –
Ja, das habe ich gerade auch gemerkt. Ich versuche immer noch, eine bessere Antwort zu finden. Irgendwelche Ideen? – bdeonovic
Dieses neue Beispiel funktioniert nicht, weil Sie einen Ausdruck an 'clusterCall' und nicht an eine Funktion übergeben. Es würde mit 'clusterEvalQ' funktionieren, aber Sie müssten auch' simulate_fxns' exportieren. –
Mit clusterEvalQ
als Modell, ich glaube, ich parallel replicate
wie implementieren würde:
parReplicate <- function(cl, n, expr, simplify=TRUE, USE.NAMES=TRUE)
parSapply(cl, integer(n), function(i, ex) eval(ex, envir=.GlobalEnv),
substitute(expr), simplify=simplify, USE.NAMES=USE.NAMES)
Die Argumente simplify
und USE.NAMES
sind kompatibel mit anstatt replicate
, aber sie machen es zu einem besseren Wrapper um parSapply
meiner Meinung nach.
Hier ist ein Beispiel von der Seite replicate
Mann abgeleitet:
library(parallel)
cl <- makePSOCKcluster(3)
hist(parReplicate(cl, 100, mean(rexp(10))))
Danke, das ist, was ich getan habe, als ich gelesen habe, dass Replikat nur ein Wrapper für sapply war. – bdeonovic