Rで並列計算を使用しようとしていますが、何か問題があります。関数内のforeachがリストを認識できない
#standard
ntw <- function(now){
L2 <- 0
for (Ii in species){
time <- subset(df, subset = species == Ii)$time
time <- sort(time)
L2 <- L2 + stepfun(time,seq(0,length(time)))(now)
}
return(L2)
}
を試してみてくださいステップ関数の和の並べ替えを取得するために
df <- data.frame(species = rep(c(1:100), each = 100), time = runif(10000,150, 1008))
species <- unique(df$species)
その後、私は次のコードを実行し、次のよう
まず、私は種と時間で構成されてリストを生成します
> ntw(152)
[1] 27
これまでのところ、今はdoParallelを読み込み、同じものを複製しようとしています並列コンピューティングを歌う:
library(doParallel)
library(foreach)
cl <- makeCluster(2)
registerDoParallel(cl)
#parallel
nt <- function(now){
L2 <- 0
foreach(i = species,.combine = rbind) %dopar% {
time <- subset(df, subset = species ==i)$time
time <- sort(time)
L2 <- L2 + stepfun(time,seq(0,length(time)))(now)
}
return(L2)
}
は
> nt(152)
Error in { : task 1 failed - "could not find 'df'"
は何が起こっているのか理解していない試してみてください。
------------------
アップデート:@ chinsoon12と@brittenbによって 後のアドバイス、私は次のコード
#parallel
nt <- function(now){
L2 <- 0
foreach(i = species,.combine = rbind,.export = "df") %dopar% {
time <- subset(df, subset = species ==i)$time
time <- sort(time)
L2 <- L2 + stepfun(time,seq(0,length(time)))(now)
}
return(L2)
}
と輸出を指定
は今標準のものと矛盾している
> nt(152)
[1] 0
してみてください。何か案が ?
を使用しているときは常に
set.seed(xxx)
が含まれますが、各クラスタにchinsoon12 @ – chinsoon12感謝をDFと種をエクスポートする必要がありますが、あなたは、より具体的なことができますか?私はかなり今doParallel – skyindeer
パラレル関数は自動的に変数と関数を現在のスコープ内で "エクスポート"します。だから、新種のRセッションに「種」を輸出して使うことができるようにする必要があります。 'foreach'のヘルプページを見て、変数、関数、パッケージをエクスポートする方法を読んでください。 – brittenb