Моя пользовательская функция не распознается в 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