Параллельное вычисление расстояния Гауэра в R

Я пытаюсь вычислить расстояние Гауэра между наблюдениями за одним набором данных. Я нашел полезную функцию по следующей ссылке: https://www.kaggle.com/olivermeyfarth/parallel-computation-of-gower-distance?scriptVersionId=46656, который содержит приведенный ниже код для использования параллельных вычислений.

Код ниже:

computeDistance <- function(dt1, dt2, nThreads = 4) {
  # Determine chunk-size to be processed by different threads
  s <- floor(nrow(dt1) / nThreads)

  # Setup multi-threading
  modelRunner <- makeCluster(nThreads)
  registerDoParallel(modelRunner)

  # For numeric variables, build ranges (max-min) to be used in gower-distance.
  # Ensure that the ranges is computed on the overall data and not on
  # the chunks in the parallel threads. Also, note that function 'gower.dist()'
  # seems to be buggy in regards to missing values (NA), which can be fixed by
  # providing ranges for all numeric variables in the function-call

  dt <- rbind(dt1, dt2)
  rngs <- rep(NA, ncol(dt))
  for (i in 1:ncol(dt)) {
   col <- dt[[i]]
   if (is.numeric(col)) {
     rngs[i] <- max(col, na.rm = T) - min(col, na.rm = T)
   }
  }

  # Compute distance in parallel threads; note that you have to include packages
  # which must be available in the different threads
  distanceMatrix <-
    foreach(
      i = 1:nThreads, .packages = c("StatMatch"), .combine = "rbind",
      .export = "computeDistance", .inorder = TRUE
    ) %dopar% {
      # Compute chunks
      from <- (i - 1) * s + 1
      to <- i * s
      if (i == nThreads) {
        to <- nrow(dt1)
      }

      # Compute distance-matrix for each chunk
      # distanceMatrix <- daisy(dt1[from:to,],metric = "gower")
      distanceMatrix <- gower.dist(dt1[from:to,], dt2, rngs = rngs)
    }

  # Clean-up
  stopCluster(modelRunner)
  return(distanceMatrix)
}    

Однако, когда я пытаюсь запустить код с моим набором данных (данные ниже — это просто простой пример) следующим образом:

Distance_data <- data.frame(cbind(c(4,234,6,1),c(4,1,6,4),c(3,75,23,1)))
distances <- computeDistance(Distance_data,Distance_data)  

Я получаю следующую ошибку в R:

Error in e$fun(obj, substitute(ex), parent.frame(), e$data) : 
worker initialization failed: package ‘clue’ could not be loaded

Я попытался добавить пакет ключей к параметру .packages в функции foreach, но это не удалось. Любая помощь приветствуется!

Примечание. Для запуска функции вам необходимо загрузить следующие пакеты.

library(StatMatch)
library(doParallel) 

person AyeTown    schedule 13.08.2018    source источник
comment
Вы получите больше, переписав это с помощью Rcpp, чем пытаясь распараллелить его.   -  person F. Privé    schedule 13.08.2018
comment
@ACE Кстати, у меня не было проблем с вашим кодом - у меня он работал успешно   -  person CPak    schedule 13.08.2018
comment
@CPak Кажется, что на моем локальном компьютере все работает нормально, но я получаю эту ошибку, когда запускаю код на R Studio Server.   -  person AyeTown    schedule 14.08.2018
comment
Вы уверены, что StatMatch установлен на R Studio Server?   -  person CPak    schedule 14.08.2018
comment
Мне удалось найти решение по следующей ссылке: stackoverflow.com/questions/31305858/   -  person AyeTown    schedule 14.08.2018
comment
Да, он был установлен на сервере. Мне просто нужно было сказать рабочим использовать тот же libPath, что и мастер.   -  person AyeTown    schedule 14.08.2018