我创建了一个闪亮的应用程序,其中基于用户选择的参数具有多个输出(表格,图形和文本)。我想将输出下载为HTML文档。我可以使用https://shiny.rstudio.com/articles/generating-reports.html上的一个小例子来做到这一点,但似乎无法弄清楚如何在markdown文件中使用多个输出。
我环顾了四周,尽管那里有一些例子,但我似乎仍然无法弄清楚。可能只是我没有经验。我在下面修改的代码(效果很差)给出了输出test.text
,test.text2
然后是test.text
的输出。
我希望能够添加多个输出值,这些输出值随后将在降价中使用。我注意到我无法在output$
downloadHandler
这是我尝试在downloadHandler
中使用的代码
test.text <- reactive({input$gendertext}) #input text written in boxes
test.text2 <- reactive({input$agetext})
output$report <- downloadHandler(
filename = "report.html",
content = function(file) {
tempReport <- file.path(tempdir(), "report.Rmd")
file.copy("report.Rmd", tempReport, overwrite = TRUE)
params <- list(n = test.text())
params2 <- list(n = test.text2())
rmarkdown::render(tempReport, output_file = file,
params = c(params,params2),
envir = new.env(parent = globalenv()))
}
)
由于我有多个输出(ggplots,表格和文本),所以我希望能够使用test.text
,test.text2
,plot1
... plotn
等。在马克登。
例如
---
title: "Dynamic report"
output: html_document
params:
n: NA
---
```{r}
test.text
plot1
``
```{r}
test.text2
plot2
``
如果有更简便的方法可以从ShinyUI下载HTML / pdf文件,那就太棒了!
谢谢!
答案 0 :(得分:1)
我知道了!感谢@Ruben Kazumov的帮助。
为了能够将图表添加到降价促销或output$
中可能包含的其他任何东西,您首先需要将图表包装在反应函数中。
例如
plot <- reactive({your plot(can be ggplot2 or whatever)}
您可以使用
output$plottorender <- renderPlot({plot()})
最后,您可以使用刚刚在降价促销中创建的plot()
!
output$report <- downloadHandler(
filename = "report.html",
content = function(file) {
tempReport <- file.path(tempdir(), "report.Rmd")
file.copy("report.Rmd", tempReport, overwrite = TRUE)`
# one list() container object for all the parameters
# all the objects have unique names (keys)
`params <- list(text1 = input$test.text1,
text2 = input$test.text2,
plot1 = plot(),
plot2 = plot())) # ... whatever you have to send to the report
rmarkdown::render(tempReport, output_file = file,
params = params,
envir = new.env(parent = globalenv()))
})
答案 1 :(得分:0)
output$report <- downloadHandler(
filename = "report.html",
content = function(file) {
tempReport <- file.path(tempdir(), "report.Rmd")
file.copy("report.Rmd", tempReport, overwrite = TRUE)
# one list() container object for all the parameters
# all the objects have unique names (keys)
params <- list(text1 = input$test.text1,
text2 = input$test.text2,
plot1 = output$plot1,
plot2 = output$plot2)) # ... whatever you have to send to the report
rmarkdown::render(tempReport, output_file = file,
params = params,
envir = new.env(parent = globalenv()))
}
)
然后在报告中
```{r}
params$text1 # inside the report, you should call the object by its key
params$plot1
``
```{r}
params$text2
params$plot2
``