Я пытаюсь ускорить мой код с помощью цикла 'foreach', используя пакет doSMP.
Вот упрощенная версия моей проблемы: я запускаю файл с именем main.R
файл: main.R:
require(doSMP)
dropbox_path = "/home/ruser/Dropbox"
workers <- startWorkers(4)
registerDoSMP(workers)
foreach(jj=1:4 ) %dopar% source("test.R")
stopWorkers(workers)
файл: test.R:
message(dropbox_path)
Возвращает следующую ошибку:
"Ошибка в источнике (" test.R "):
задача 1 не выполнена - "объект 'dropbox_path' не найден"
Если я изменю main.R на:
require(doSMP)
dropbox_path = "/home/ruser/Dropbox"
workers <- startWorkers(4)
registerDoSMP(workers)
foreach(jj=1:4 ) %dopar% message(dropbox_path)
stopWorkers(workers)
Тогда это работает очень хорошо.
Он также хорошо работал с последовательным кодом («для» вместо «foreach»).
Таким образом, R дочерние экземпляры могут обращаться к переменной dropbox_path, но не тогда, когда она анализируется через функцию-источник. Я попытался поиграться с аргументами функции source () local и chdir, но безуспешно.
Знаете ли вы, как работает код? Я хотел бы продолжать использовать функцию source ().