knitr with Shiny:临时目录

时间:2017-04-05 09:50:13

标签: r shiny latex knitr pandoc

我已经建立了一个估计模型的Shiny应用程序;我希望用户能够在估算完成后以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错误。'发生这种情况是因为\includegraphics{}内报表中图形的路径未正确指定:knitr不会仅使用文件路径中的前向斜杠,而是生成向后和向前斜杠的组合,例如

\includegraphics{C:\Users\admin\AppData\Local\Temp\Rmksdfj0568\report_model_files/figure-latex/unnamed-chunk-5-1.pdf}.

当我在Shiny之外从RStudio编写完全相同的文档时,这不会发生,因为.tex不是在临时目录中生成的,而是在放置.Rmd的目录中生成的,并且我得到正确的路径为< / p>

\includegraphics{report_model_files/figure-latex/unnamed-chunk-5-1.pdf}.

此外,当我不使用自定义模板而是使用Pandoc内置模板时,一切正常。但是,我无法弄清楚为什么使用自定义模板会产生影响。有办法解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

至少在这种特定情况下,这个问题的解决方案是包含

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

在&#39; Rmd&#39;开头。使用自定义模板的文件。当应用程序在本地运行时,此解决方案可能无法在部署应用程序时起作用。