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 2

1 ответ:

Решение этой проблемы, по крайней мере в данном конкретном случае, состоит в том, чтобы включить

```{r, echo = FALSE, include = FALSE}
knitr::opts_knit$set(base.dir = normalizePath(tempdir(), winslash = '/'))
knitr::opts_chunk$set(fig.path = "figure/")
```

В начале файла 'Rmd', который использует пользовательский шаблон. Это работает, когда приложение выполняется локально, решение может не работать, когда приложение развернуто.