【问题标题】:knitr with Shiny: temporary directoryknitr with Shiny:临时目录
【发布时间】:2017-08-30 20:38:55
【问题描述】:

我已经构建了一个估计模型的 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 的目录中生成,并且我得到了正确的路径为

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

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

【问题讨论】:

    标签: r shiny latex knitr pandoc


    【解决方案1】:

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

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

    在使用自定义模板的“Rmd”文件的开头。这在应用程序在本地运行时有效,当应用程序部署时该解决方案可能不起作用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-24
      • 2011-06-08
      • 2016-01-03
      • 2019-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多