私の理解では、スレーブ プロセスは R パッケージ Snowfall のグローバル/親環境の変数にアクセスできません。
たとえば、次のコードでは、予想どおりにエラー メッセージが表示されます。
parfun <- function(i, var1, var2) {
return(var3)
}
var3 <- 'VAR3'
library(snowfall)
sfInit(parallel = TRUE, cpus = 2)
res <- sfLapply(seq(1, 2), parfun, 'VAR1', 'VAR2')
res
エラーメッセージ:
Error in checkForRemoteErrors(val) :
2 nodes produced errors; first error: object 'var3' not found
ただし、別の関数で並列コードを実行する場合、エラー メッセージは表示されません。
fun1 <- function(var1, var2, var3) {
parfun <- function(i, var1, var2) {
return(var3)
}
library(snowfall)
sfInit(parallel = TRUE, cpus = 2)
res <- sfLapply(seq(1, 2), parfun, var1, var2)
res
}
fun1('VAR1', 'VAR2', 'VAR3')
結果は次のとおりです。
[[1]]
[1] "VAR3"
[[2]]
[1] "VAR3"
var3
functionparfun
には存在しないが、彼の親環境には存在するため、この動作はわかりませんfun1
。
誰か説明してくれませんか?提案をありがとう。