我有一个带有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 <- tex_pn()
更改为params$set_title <- params$pn
,这会创建一个文件,但不显示任何标题。
答案 0 :(得分:1)
这里的问题不一定是如何配置闪亮的应用程序,而是更多如何在报告中指定参数。您应该在YAML的前题中创建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中参数化报告的更多信息。
答案 1 :(得分:0)
如果您像这样在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
。