У меня возникают трудности с пониманием того, как переменные определяются / передаются в функции при взаимодействии с параллельным пакетом
library(parallel)
test <- function(a = 1){
no_cores <- detectCores()-1
clust <- makeCluster(no_cores)
result <- parSapply(clust, 1:10, function(x){a + x})
stopCluster(clust)
return(result)
}
test()
[1] 4 5 6 7 8 9 10 11 12 13
x = 1
test(x)
Error in checkForRemoteErrors(val) :
3 nodes produced errors; first error: object 'x' not found
test () работает, но test (x) - нет. Когда я изменяю функцию следующим образом, она работает.
test <- function(a = 1){
no_cores <- detectCores()-1
clust <- makeCluster(no_cores)
y = a
result <- parSapply(clust, 1:10, function(x){y + x})
stopCluster(clust)
return(result)
}
x = 1
test(x)
Может кто-нибудь объяснить, что происходит в памяти?