Je cours une fonction similaire au calcul de l'écart type... mais qui prend beaucoup plus de temps à s'exécuter.
Je souhaite que la fonction soit utilisée pour calculer la valeur cumulée de l'écart type, c'est-à-dire pour les jours 1 à n la fonction de type écart type pour cela.
Cependant, en raison de la longue période de calcul nécessaire, je voulais exécuter cela sur un cluster.
Donc, je voulais diviser les données pour que chaque nœud du cluster termine à peu près en même temps. par exemple si ma fonction était la suivante, la méthode sur une seule machine fonctionnerait de la manière suivante:
vec <- xts(rnorm(1000),Sys.Date()-(1:1000)
lapply(1:length(vec), function(x){
Sys.sleep(30)
sd(as.numeric(vec[1:x]))
}
(N.B Le sys.sleep est ajouté là pour représenter le temps supplémentaire nécessaire pour traiter ma fonction personnalisée)
cependant, disons que je voulais diviser cela sur deux machines et au lieu de 1, comment pourrais-je diviser le vecteur 1:length(vec)
de sorte que je puisse donner à chaque machine une liste de c(1:y)
à la machine 1 et c((y+1):length(vec))
à la machine 2, pour que les deux machines terminent à temps. c'est-à-dire quelle serait la valeur de y pour que les deux processus se terminent à peu près en même temps... et que se passerait-il si nous le faisions sur 10 machines... comment pourrait-on trouver les coupures dans le vecteur original c(1:length(vec))
pour que cela fonctionne...
c'est-à-dire. J'aurais
y <- 750 # C'est juste une estimation de l'endroit potentiellement où cela pourrait être.
vec <- xts(rnorm(1000),Sys.Date()-(1:1000)
# sur la machine 1 j'aurais
lapply(1:y, function(x){
Sys.sleep(30)
sd(as.numeric(vec[1:x]))
}
# et sur la machine 2 j'aurais
lapply(y+1:length(vec), function(x){
Sys.sleep(30)
sd(as.numeric(vec[1:x]))
}