pandoc有时无法找到utf8.md文件

问题描述 投票:0回答:1

我有一个R代码,它循环呈现几个rmarkdown HTML报告。这大致是循环中的代码:

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)

我更新的问题:是否有任何其他可能性将工作目录设置为与render()函数的“输入”参数不同的位置(某处与.Rmd代码位置不同)?

parallel-processing r-markdown pandoc
1个回答
0
投票

经过一些进一步的调查,我发现所有并行线程都使用相同的工作目录,并创建具有相同名称的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)
© www.soinside.com 2019 - 2024. All rights reserved.