У меня есть 1000 CSV-файлов в моем рабочем каталоге, и каждый файл имеет идентификатор местоположения, количество осадков и температуру. Структура одного файла показана ниже:
set.seed(123)
my.dat <- data.frame(Id = rep(1, each = 365),
rain = runif(365, min = 0, max = 20),
tmean = sample(20:40, 365, replace = T))
Я написал функцию Rcpp, которая также хранится в моем рабочем каталоге. Эта функция принимает данные об осадках и температуре и вычисляет некоторые производные переменные var1
и var2
. Я хочу прочитать данные о погоде в каждом месте, применить функцию и сохранить соответствующий вывод с помощью пакета foreach.
location.vec <- 1:1000
myClusters <- makeCluster(6)
registerDoParallel(myClusters)
foreach(i = 1:length(location.vec),
.packages = c('Rcpp', 'dplyr', 'data.table'),
.noexport = c('myRcppFunc'),
.verbose = T) %dopar%
{
Rcpp::sourceCpp('myRcppFunc.cpp')
idRef <- location.vec[i]
# read the weather data
temp_weather <- fread(paste0('weather_',idRef,'.csv'))
# apply my Rcpp function
temp_weather[, c("var1","var2") := myRcppFunc(rain, tmean)]
# save my output
fwrite(temp_weather, 'paste0('weather_',idRef_modified,'.csv')')
}
stopCluster(myClusters)
Этот цикл, кажется, имеет странное поведение. Иногда он просто зависает на 10-й итерации, иногда на 40-й и т. д. каждый раз, когда я запускаю его, и тогда мне приходится убивать задание.
Я сомневаюсь, что это вызвано тем фактом, что несколько процессов пытаются одновременно получить доступ к функции Rcpp, что приводит к этой проблеме? Как я могу это исправить? Могу ли я прочитать функцию Rcpp в аргументе foreach, чтобы мне не приходилось ее загружать? Любой другой совет?
Спасибо
sourceCpp()
. Соберите пакет, загрузите его на каждого воркера. Параллельные вызовы правильно настроенной функции Rcpp работают так же хорошо, как и любая другая скомпилированная функция R. Но никаких ярлыков. Также: вы опечатались:myRcppFunc
. Не РЦКП. - person Dirk Eddelbuettel   schedule 20.07.2020[rcpp] build package
в строке поиска выше, чтобы найти сборку пакета [a] в контексте Rcpp, выбранного тегом[rcpp]
. Только этот простой поиск дает 284 ответа. Вы также можете попробовать Google и т. Д. Мы писали об этом и объясняли в течение десятилетия, вы можете воспользоваться этим, просто выполнив поиск. Ссылка с результатами: stackoverflow.com/search?q=%5Brcpp%5D+build+package - person Dirk Eddelbuettel   schedule 20.07.2020