Я хочу запустить несколько примеров начальной загрузки параллельно.Расчет включает в себя создание временного каталога для каждого образца.Я использую пакет future
с plan(multisession)
, который автоматически создает кластер форка на моей машине linux для параллельного запуска примеров.
Моя проблема в том, что tempdir()
не возвращает разные результаты для каждого образца, даже если я set.seed(.)
по-разному для каждого ядра.
MCVE (это не будет работать в Windows, потому что Windows не может fork()
):
clu <- parallel::makeForkCluster(4)
unlist(parallel::clusterApply(clu, 1:4,
function(x){ set.seed(x); tempdir() }))
## [1] "/tmp/Rtmp0uaUin" "/tmp/Rtmp0uaUin" "/tmp/Rtmp0uaUin" "/tmp/Rtmp0uaUin"
Если я перезагружаю R, я получаю разные результаты, но для сеанса возвращаются все значенияравно.
С другой стороны, другие случайные функции работают нормально, по крайней мере, если я включу set.seed(x)
unlist(parallel::clusterApply(clu, x = 1:4,
function(x){ set.seed(x); rnorm(1) }))
##[1] -0.6264538 -0.8969145 -0.9619334 0.2167549
unlist(parallel::clusterApply(clu, x = 1:4,
function(x){ rnorm(1) }))
## [1] -1.100044 -1.100044 -1.100044 -1.100044
Почему tempdir()
ведет себя иначе, чем другие случайные функции, и чтоя могу с этим поделать?