R - экспортировать функцию (не объект) во все кластеры - PullRequest
0 голосов
/ 05 мая 2020

Я использую pblapply () для параллельного запуска кода. Он дает полосу прогресса, что полезно. Я использую такие функции, как clusterExport () или clusterEvalQ () , чтобы экспортировать объекты или библиотеки в кластеры. Но мне не удалось поделиться домашней функцией, доступной в моем окружении. Можете ли вы мне с этим помочь?

Вот очень простой c пример:

# home-made function
mean_by_column <- function(j){ 
  mean(iris[,j])
}

# this will produce error: could not find function "mean_by_column"
cl <- parallel::makeCluster(2)

result_list <- pbapply::pblapply(
  cl = cl,
  X  = 1:4,
  FUN = function(j){ mean_by_column(j) }
)

# this will work
result_list <- pbapply::pblapply(
  cl = cl,
  X  = 1:4,
  FUN = function(j){ mean(iris[,j]) }
)

Он работает, когда я переписываю всю функцию в аргументе pblapply FUN, но я не Я не хочу его использовать, потому что настоящая самодельная функция очень длинная, и я хотел бы применить такой код несколько раз, я не хочу каждый раз переписывать всю функцию. Более того, это не будет оптимальным решением, если я захочу изменить самодельную функцию позже или если я захочу произвести отладку.

Заранее спасибо.

1 Ответ

0 голосов
/ 06 мая 2020

Функция также является объектом.

Следовательно, вы можете экспортировать ее, используя parallel::clusterExport(cl, "mean_by_column").

...