2

私の理解では、スレーブ プロセスは 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"

var3functionparfunには存在しないが、彼の親環境には存在するため、この動作はわかりませんfun1

誰か説明してくれませんか?提案をありがとう。

4

0 に答える 0