ddply () не работает с пользовательской функцией, когда включена опция .parallel - PullRequest
0 голосов
/ 14 февраля 2019

Моя пользовательская функция не распознается в ddply (), когда я устанавливаю .parallel = TRUE.

Я пытаюсь использовать ddply для параллельных вычислений с пользовательской функцией.Фактический код и данные будут довольно длинными и большими.Я обнаружил, что следующий простой код достаточно хорош, чтобы объяснить мою проблему:

df <- data.frame(val=1:10, ind=c(rep(2, 5), rep(3, 5)))
library(doSNOW)
registerDoSNOW(makeCluster(2, type = "SOCK"))
my_square <-function(x){return(x^2)}
system.time(print(ddply(df, .(ind), function(x) { Sys.sleep(2); sum(x)}, .parallel=FALSE)))
system.time(print(ddply(df, .(ind), function(x) { Sys.sleep(2); sum(x)}, .parallel=TRUE)))
system.time(print(ddply(df, .(ind), function(x) { Sys.sleep(2); my_square(sum(x))}, .parallel=FALSE)))
system.time(print(ddply(df, .(ind), function(x) { Sys.sleep(2); my_square(sum(x))}, .parallel=TRUE)))

Первые три ddply работают хорошо.Не работает только последняя строка, и у меня появляется следующее сообщение об ошибке:

Error in do.ply(i) : 
task 1 failed - "could not find function "my_square""
In addition: Warning messages:
1: <anonymous>: ... may be used in an incorrect context: ‘.fun(piece, ...)’

2: <anonymous>: ... may be used in an incorrect context: ‘.fun(piece, ...)’

Timing stopped at: 0.03 0 2.08
...