【问题标题】:How to pass a title from Shiny application to R Markdown document?如何将标题从 Shiny 应用程序传递到 R Markdown 文档?
【发布时间】:2019-01-07 14:53:32
【问题描述】:

我有一个带有 R Markdown 报告的闪亮应用程序。我正在尝试通过 R 将标题传递给 .Rmd 文件中的 YAML。

简化的闪亮应用

library(shiny)
library(rmarkdown)
ui <- fluidPage(
  titlePanel("test"),
  sidebarLayout(
    sidebarPanel(
      textInput("p", "Project Name", "Project Name"),
      downloadButton("report")
    ),

    mainPanel(
    )
  )
)

server <- function(input, output, session) {
  tex_pn <- reactive({paste("Project Name:",input$p)})

  output$report <- downloadHandler(
    filename = "report.pdf",
    content = function(file) {
      tempReport <- file.path(tempdir(), "report.Rmd")
      file.copy("report.Rmd", tempReport, overwrite = TRUE)
      params <- list(pn=input$p)
      rmarkdown::render(tempReport, output_file = file,
                        params = params,
                        envir = new.env(parent = globalenv())
      )
    }
  )

}
shinyApp(ui = ui, server = server)

report.Rmd

我在.Rmd 文件中执行了以下操作,但不起作用:

---
output:
  pdf_document :
    keep_tex: true
    number_sections: true
---

```{r echo=FALSE}
params <- list()
params$set_title <- tex_pn()
```
---
title: `r params$set_title`
author: "myname"
date: "`r Sys.Date()`"
---

some text `r params$pn`

错误是:Warning: Error in tex_pn: could not find function "tex_pn"

我还尝试将params$set_title &lt;- tex_pn() 更改为params$set_title &lt;- params$pn,这会创建一个文件但不显示任何标题。

【问题讨论】:

    标签: r shiny yaml r-markdown pandoc


    【解决方案1】:

    如果您像这样在 YAML 标头的前面添加 r 代码,这可能会起作用

    ---
    output:
      pdf_document :
        keep_tex: true
        number_sections: true
    ---
    
    ```{r, echo=FALSE}
    params <- list()
    params$set_title <- paste("Report from", date())
    ```
    
    ---
    title: `r params$set_title`
    author: "myname"
    date: "`r Sys.Date()`"
    ---
    
    # Content
    And then something here...
    

    不过,我不确定这是否合法,但至少对我来说它有效。例如,我只是粘贴了一些带有当前日期的字符串,但在那里你会有你的textInput

    【讨论】:

    • 我已根据您的回答更新了我的问题!现在更清楚了!
    【解决方案2】:

    这里的问题不一定是您的闪亮应用程序是如何配置的,而更多的是如何在报告中指定参数。您应该在 YAML frontmatter 中创建 params,并在参数之后指定标题,如突出显示的 here

    ---
    author: "myname"
    date: "`r Sys.Date()`"
    params:
      set_title: test
    title: "`r params$set_title`"
    output: pdf_document
    ---
    
    # Content
    And then something here...
    

    然后您可以在render 函数中控制文档参数,如下所示:

    rmarkdown::render("report.Rmd",
                      params = list(set_title = "Some Text"),
                      envir = new.env(parent = globalenv()))
    

    值得阅读R Markdown 权威指南中关于parameterized report 的部分,以了解有关 R Markdown 中参数化报告的更多信息。

    【讨论】:

    猜你喜欢
    • 2023-03-08
    • 1970-01-01
    • 2016-10-13
    • 2020-01-08
    • 2018-10-16
    • 1970-01-01
    • 2017-09-10
    • 2019-03-04
    • 2014-04-21
    相关资源
    最近更新 更多