Как исправить «первую ошибку: 'arg' должен быть NULL или вектор символов» при использовании parApply? - PullRequest
0 голосов
/ 13 июля 2020

Я пытаюсь использовать parApply для анализа матрицы данных размером 41x1000 по строкам. Ниже перечислены функции, которые я использую:

library(signal)

custom_filtfilt <- function(trial, a, b){

  y = filter(b, a, c(trial, numeric(2 * max(length(a), length(b)))))
  y = rev(filter(b, a, rev(y)))[seq_along(trial)]
  return(y)

}
filtered_data <- parApply(cl, trial_surr_ds, 1, custom_filtfilt, bf_filters[[f]]$a, bf_filters[[f]]$b)

Я тестировал это на локальном компьютере, и он работал нормально, но мне нужно переместить его в вычислительный кластер с 80 процессорами для ускорения обработка. Теперь я получаю следующее сообщение об ошибке:

41 nodes produced errors; first error: 'arg' must be NULL or a character vector

Когда я меняю границу параллельного вызова, я получаю следующее:

filtered_data <- parApply(cl, trial_surr_ds, 2, custom_filtfilt, bf_filters[[f]]$a, bf_filters[[f]]$b)
Error in checkForRemoteErrors(val) : 
  80 nodes produced errors; first error: 'arg' must be NULL or a character vector

Кажется, что данные читаются правильно в первом вызове, поскольку только 41 узел обрабатывает данные для этого вызова, но по какой-то причине кажется, что он не распознает ввод из матрицы, предоставленной для parApply. Есть идеи, что может происходить?

1 Ответ

0 голосов
/ 14 июля 2020

Похоже, возникла проблема с экспортом правильной матрицы данных на каждый узел кластера. Следующий код исправил это:

filtered_data <- parApply(cl, trial_surr_ds, 1, function(x) custom_filtfilt(x, a=bf_filters[[f]]$a, b=bf_filters[[f]]$b))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...