微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 r Shiny 中制作定制的可下载报告?

如何解决如何在 r Shiny 中制作定制的可下载报告?

所以基本上,我的应用程序为用户生成了 10 个不同的表格和图表作为结果。现在,我想要做的是,为用户显示一个清单,然后让用户选择他们想要包含在他们下载的报告中的项目。这将制作一个定制的报告,其中只包含用户希望拥有的东西。因此,请在选中复选框时帮助我在报表中添加项目的过程。我有点想法,我必须用 r-markdown 生成报告,但希望进一步澄清。

app.R

library(shiny)
library(rmarkdown)
server <- function(input,output) {
  output$downloadReport <- downloadHandler(
    filename = function() {
      paste('my-report',sep = '.',switch(
        input$format,PDF = 'pdf',HTML = 'html',Word = 'docx'
      ))
    },content = function(file) {
      src <- normalizePath('test.Rmd')
      
      # temporarily switch to the temp dir,in case you do not have write
      # permission to the current working directory
      owd <- setwd(tempdir())
      on.exit(setwd(owd))
      file.copy(src,'test.Rmd',overwrite = TRUE)
      
      out <- rmarkdown::render('test.Rmd',params = list(text = input$text,outp=input$Try),switch(input$format,PDF = pdf_document(),HTML = html_document(),Word = word_document()
                               ))
      file.rename(out,file)
    }
  )
}

ui <- fluidPage(
  tags$textarea(id="text",rows=20,cols=155,placeholder="Some placeholder text"),flowLayout(radioButtons('format','Document format',c('HTML','Word'),inline = TRUE),checkBoxGroupInput("Try","Let's hope this works",choiceNames = list("include hi","include hey","include hello","include how are you"),choiceValues = list("HI","hey","HELLO","HOW ARE YOU")),downloadButton('downloadReport'))
  
)

shinyApp(ui = ui,server = server)

test.Rmd

---
title: "Parameterized Report for Shiny"
output: html_document
params:
  text: 'NULL'
  outp: 'NULL'
---

# Some title

`r params[["text"]]`
`r params[["outp"]]`

在这里,我添加了 ID 为“Try”的 checkBoxGroupInput 并获得了它的值作为输出。所以,除了现在,我已经完成了一半,我只需要将绘图作为输出而不是选择值。

解决方法

你的代码看起来不错。只需将数据作为参数传递并像在 Shiny App 中一样创建绘图。您可以使用默认绘图函数,也可以使用 ggplot2plotly。要包括/排除图/表,还可以将复选框值 input$Try 作为参数传递给报告,并使用条件添加图/表,如下所示。

我只发布 Rmd 和我在您的 Shiny 应用程序中更改的行。其他一切看起来都不错。

server <- function(input,output) {
    output$downloadReport <- downloadHandler(
        filename = function() {
            paste('my-report',sep = '.',switch(
                input$format,PDF = 'pdf',HTML = 'html',Word = 'docx'
            ))
        },content = function(file) {
            src <- normalizePath('test.Rmd')
            # temporarily switch to the temp dir,in case you do not have write
            # permission to the current working directory
            owd <- setwd(tempdir())
            on.exit(setwd(owd))
            file.copy(src,'test.Rmd',overwrite = TRUE)
            
            include <- input$Try
            out <- rmarkdown::render('test.Rmd',params = list(tbl = mtcars,include = include),switch(input$format,PDF = pdf_document(),HTML = html_document(),Word = word_document()
                                     ))
            file.rename(out,file)
        }
    )
}

更新了 r 降价:

---
title: "Parameterized Report for Shiny"
output: html_document
params:
  tbl: NA
  include: NA
---

```{r echo=FALSE}
library(knitr)
tbl <- params$tbl
include <- params$include
```

```{r echo=FALSE,results='asis'}
if ('HI' %in% include) {
    kable(tbl[1:5,],caption= 'A table')
}
```

```{r echo=FALSE,result='asis'}
if ('HEY' %in% include) {
    plot(tbl$mpg,tbl$cyl)
}
```

我真正喜欢的是每次更改报告时都不必重新启动 Shiny App,因为它独立于应用程序本身。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。