Я пытаюсь объединить функцию распараллеливания plyr
для вызова функции python через reticulate
, но, похоже, в разных экземплярах используется идентичное начальное число.
на python:
# This is called python_script.py
import random
def give_a_rand():
return(random.random())
на R
library(reticulate)
library(plyr)
library(doMC)
doMC::registerDoMC(cores=10)
reticulate::source_python('/path/to/python_script.py')
После загрузки библиотек, регистрации ядер для plyr
и привязки скрипта python к моему сеансу R через reticulate
мы можем теперь вызвать функцию python give_a_rand()
изначально на R
> give_a_rand()
[1] 0.896585
Мы можем использовать plyr для многократного запуска без распараллеливания :
> aaply(.data=1:10, .margins=1, .fun=function(x){give_a_rand()}, .parallel=F)
1 2 3 4 5 6
0.183420430 0.539790166 0.817348174 0.130959177 0.143210990 0.794048321
7 8 9 10
0.276724929 0.820918953 0.003462523 0.903942433
Я думаю, что в какой-то момент мне нужно принудительносемя для механизма рандомизации таким образом, что каждый экземпляр имеет свой экземпляр.Пока все отлично ... но как распараллелить это?
aaply(.data=1:10, .margins=1, .fun=function(x){give_a_rand()}, .parallel=T)
1 2 3 4 5 6 7 8
0.896585 0.896585 0.896585 0.896585 0.896585 0.896585 0.896585 0.896585
9 10
0.896585 0.896585