从闪亮到HTML降价添加多个输出

时间:2019-08-29 23:05:43

标签: r shiny r-markdown

我创建了一个闪亮的应用程序,其中基于用户选择的参数具有多个输出(表格,图形和文本)。我想将输出下载为HTML文档。我可以使用https://shiny.rstudio.com/articles/generating-reports.html上的一个小例子来做到这一点,但似乎无法弄清楚如何在markdown文件中使用多个输出。

我环顾了四周,尽管那里有一些例子,但我似乎仍然无法弄清楚。可能只是我没有经验。我在下面修改的代码(效果很差)给出了输出test.texttest.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.texttest.text2plot1 ... plotn等。在马克登。

例如

---
title: "Dynamic report"
output: html_document
params:
  n: NA
---
```{r}
test.text
plot1
``

```{r}
test.text2
plot2
``

如果有更简便的方法可以从ShinyUI下载HTML / pdf文件,那就太棒了!

谢谢!

2 个答案:

答案 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
``