У меня есть код R, который отображает несколько отчетов HTML rmarkdown в цикле.Это примерно код в цикле:
knitr::knit_meta(class=NULL, clean = TRUE)
rmarkdown::render(input =paste0("10_ReportingHTML/10_01_ReportingPortfoliosHTML.Rmd"), output_file = paste0(reportPath), params = list(MyDataFrame = MyDataFrame[i]))
Под MyDataFrame [i] я имею в виду, что входной data.frame отличается на каждой итерации цикла.
Я позволил этому коду работатьсервер AWS, параллельный на нескольких ядрах.Параллельно я имею в виду, что мой код выполняется одновременно в нескольких потоках, но с разными входными данными.
Иногда он выполняется без проблем, но иногда возникает следующая ошибка:
pandoc: 10_01_ReportingPortfoliosHTML.utf8.md: openBinaryFile: does not exist (No such file or directory)
Делаете ли выесть идеи, почему это происходит и почему не регулярно?
Обновление:
После некоторого дальнейшего изучения я обнаружил, что все параллельные потоки используют один и тот же рабочий каталоги создаем метаданные knitr с такими же именами.Вот почему, если один поток очищает все метаданные, он также исчезает в других потоках.Более того, если я не очищаю метаданные, я получаю сумасшедшее смешение данных разных потоков: я решил их ужасным образом, скопировав код для каждого параллельного процесса в отдельный каталог с уникальным именем и установив егов качестве рабочего каталога для этого процесса.После того, как процесс завершен, этот уникальный временный созданный рабочий каталог удаляется:
libPath = "Some/Unique/directory"
system(paste0("cp ", R_FUNCTIONS_PATH, "10_ReportingHTML/10_01_ReportingPortfoliosHTML.Rmd ", libPath, "/"), intern = T)
rmarkdown::render(input =paste0(libPath, "/10_01_ReportingPortfoliosHTML.Rmd"), output_file = paste0(reportPath), params = list(MyDataFrame = MyDataFrame[i]))
knitr::knit_meta(class=NULL, clean = TRUE)
system(paste0("rm -r ", libPath), intern = T)
Мой обновленный вопрос: есть ли какая-либо другая возможность установить рабочий каталог в местоположение, отличное от аргумента "input" из render()
функция (где-то отличается от местоположения кода .Rmd)?