私は、コードの始めにソースとなる複数のユーザー定義関数で構成された非常に長いコードを持っています。スクリプト全体はfor
ループ内にあり、csvファイルを1つずつ読み込んで解析し、繰り返しごとに2つのcsvファイルとPNGを出力します。平均して、コードはファイルあたり約18秒かかっており、通常は1回の分析で約150/200のファイルが解析されます。foreachでRでマルチコアを使用するループ
これは時間がかかりますので、私のPC上の8つのコアを利用したいと思います。
メインのfor
ループをforeach
に変更し、%dopar%
を追加しましたが、私のコードは機能しません。
例が示されています:
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()
}
私は問題は、他のロードされたパッケージがforeach
ループで使用することができないということであると信じています。この場合、どうすればこの問題を解決できますか?第2に、ループの外に以前にロードされたソースコードファイルを使用できないことを意味しますか?すなわち私のユーザ定義関数?
私はその点を見逃しているかもしれませんが、これを行う簡単な方法はまだありません。アドバイスをいただければ幸いです。
私はこれを試しました(ただし、私のコードを時間通りに更新していませんでした)が、私はまだ同じ問題を抱えています。 – sym246