knitr с блестящим: временный каталог
Я создал блестящее приложение, которое оценивает модель; я хотел бы, чтобы пользователь мог загрузить резюме модели в формате pdf, когда оценка будет завершена. Я включил кнопку загрузки в приложение следующим образом:
output$download_estimation = downloadHandler(
filename = "report.pdf",
content = function(file) {
withProgress(message = 'Generating...', {
rmarkdown::render('report_model.Rmd', output_file = file)
})
})
Файл ' report_model.Rmd ' использует пользовательский шаблон LaTeX. Проблема в том, что всякий раз, когда я нажимаю кнопку загрузки в Shiny, knitr оценивает куски, но после этого я получаю ошибку LaTeX 'Undefined control sequence."Это происходит потому, что пути к цифры в отчете в пределах includegraphics{}
указаны неверно: вместо того, чтобы использовать только прямые косые черты в пути к файлу, knitr создает комбинацию обратных и прямых косых черт, например
includegraphics{C:UsersadminAppDataLocalTempRmksdfj0568report_model_files/figure-latex/unnamed-chunk-5-1.pdf}.
Когда я вяжу точно такой же документ из RStudio за пределами Shiny, этого не происходит, потому что .tex создается не во временном каталоге, а скорее в каталоге, в котором находится .Rmd помещается, и я получаю правильный путь как
includegraphics{report_model_files/figure-latex/unnamed-chunk-5-1.pdf}.
Более того, когда я не использую обычай шаблон, но скорее Pandoc встроенный один, все работает нормально. Я был, однако, не в состоянии понять, почему использование пользовательского шаблона имеет значение. Есть ли способ исправить это?
1 ответ:
Решение этой проблемы, по крайней мере в данном конкретном случае, состоит в том, чтобы включить
```{r, echo = FALSE, include = FALSE} knitr::opts_knit$set(base.dir = normalizePath(tempdir(), winslash = '/')) knitr::opts_chunk$set(fig.path = "figure/") ```
В начале файла 'Rmd', который использует пользовательский шаблон. Это работает, когда приложение выполняется локально, решение может не работать, когда приложение развернуто.