ile R'de multicores kullanarak döngü için Kodumun başlangıcında çok sayıda kullanıcı tanımlı fonksiyondan oluşan çok uzun bir kod parçam var. Komut dosyası, csv dosyalarını tek tek okuyan, analiz eden ve 2 csv dosyası ve yineleme başına bir PNG olan bir for
döngüsündedir. Ortalama olarak, kod, dosya başına yaklaşık 18 saniye sürer ve bir seferde analiz edilmek üzere normal olarak 150/200 dosya vardır.Foreach
Bu, uzun bir zaman alır, bu nedenle bilgisayarımdaki 8 çekirdekten yararlanmak istiyorum.
foreach
ana for
döngüsümü değiştirdim ve %dopar%
ekledim, ancak kodum çalışmıyor.
bir örnek gösterilmiştir:
cl=makeCluster(8)
registerDoParallel(cl)
library(parallel)
library(foreach)
library(ggplot2)
library(data.table)
foreach(kk=1:2) %dopar% {
Data=rnorm(60000,3,kk)
Date=seq(as.POSIXct("2014-01-01 00:00:00"), length.out=60000, by="15 mins")
DF=data.frame(Date,Data)
DF$MeanDiff=sapply(DF$Data, function(x) abs(x-mean(DF$Data)))
write.csv(data.table(DF), file="Data with difference from mean.csv", row.names=F)
DF$Colour=c(rep("Pink",30000),rep("Blue",30000))
file_name_data = "Test plot.jpg"
png(filename=file_name_data,width=900,height=600,res=80)
print(ggplot(DF, aes(Date, Data,colour=Colour, group=1))+geom_line()+geom_point()+
scale_x_datetime(limits=c(as.POSIXct(Date[1]), as.POSIXct(Date[length(Date)])), labels = date_format("%d-%m-%y")))
dev.off()
}
Sorun diğer yüklenen paketleri foreach
döngüsünde kullanılacak mümkün değildir olduğunu düşünmektedirler. Eğer durum buysa, bunu nasıl düzeltirim? İkincisi, bu aynı zamanda, döngü dışında yüklenen herhangi bir kaynak kod dosyasının kullanılamayacağı anlamına mı geliyor? yani kullanıcı tanımlı işlevlerim?
Bu noktayı kaçırıyor olabilirim, ama daha önce yakalamadığım daha kolay bir yol olduğunu hayal ediyorum. Herhangi bir tavsiye takdir edilecektir.
Bunu denedim, (ancak zaman içinde kodumu güncellememiştim), ama yine de aynı sorunu yaşıyorum .. – sym246