在R markdown报告中使用Shiny app中的图表和数据表

时间:2017-10-23 12:04:56

标签: r shiny report r-markdown

我创建了一个Shiny应用程序,它涉及用户导入数据,操纵数据,创建数据表和关联的绘图。

我想使用Rmarkdown构建可下载的报告(我刚开始使用它)。但是,我不确定如何在Rmarkdown脚本中打印在R中生成的数据表和图,而不从Shiny应用程序复制整个R代码。这是一段很长的代码,所以我希望能够直接使用输出。

例如,我已复制以下应用以证明我的观点。

library(shiny)

ui <- fluidPage(

   titlePanel("Old Faithful Geyser Data"),

   sidebarLayout(
      sidebarPanel(
         sliderInput("bins",
                     "Number of bins:",
                     min = 1,
                     max = 50,
                     value = 30)
      ),

      mainPanel(
         plotOutput("distPlot"),
         dataTableOutput("summary_table"),
         downloadButton("report", "Generate report")
      )

   )
)

server <- function(input, output) {

   output$distPlot <- renderPlot({
      x    <- faithful[, 2] 
      bins <- seq(min(x), max(x), length.out = input$bins + 1)

      hist(x, breaks = bins, col = 'darkgray', border = 'white')
   })

   output$summary_table <- renderDataTable({
     x <- faithful
     head(x,5)
   })

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

shinyApp(ui = ui, server = server)

我想访问可下载的R markdown文件中的绘图和数据表。

1 个答案:

答案 0 :(得分:1)

我的方法,使用app.R和test.Rmd

app.R中的

创建一个反应变量,包含图/图表(替换为您自己的图)。

chart1 <- reactive({
    ggmap(get_map(location = "Netherlands", 
                 zoom = 7, 
                 scale = 2, 
                 color="bw",
                 language = "nl-NL")) 
  })

然后,拨打降价:

output$report <- downloadHandler(
filename = "test.pdf",

content = function(file) {
  src <- normalizePath('test.Rmd')

  #switch to system tempdir
  #just in case the app doesn't have write persission in the current folder
  owd <- setwd(tempdir())
  on.exit(setwd(owd))
  file.copy(src, 'test.Rmd', overwrite = TRUE)

  out <- render("test.Rmd", "pdf_document" )
  file.rename(out, file)
}

<。>在.Rmd文件中,您可以调用图表:

plot(chart1()) 

注意图表1之后的()

遵循相同的表格结构,以及您希望在降价中包含的所有其他对象。