使用R和ReporteRs进行动态报道

使用R和ReporteRs进行动态报道,r,dynamic,shiny,powerpoint,reporters,R,Dynamic,Shiny,Powerpoint,Reporters,我有一个闪亮的仪表板应用程序,可以显示大约15个图表。我使用ReporteRs允许用户下载包含图表的powerpoint报告;每张幻灯片一张。现在,我为每个图表添加了一些复选框,我想知道如何使报表生成动态化,这样,如果用户选中一个图表,则只生成一张幻灯片;如果他们选择两张图表,则生成两张幻灯片,依此类推 这里有一个简单的例子。我有两张图表。如果我在“下载”选项卡上取消选择一张幻灯片,我如何告诉记者我只想要一张带有所选图表的幻灯片?如果我同时选中这两张幻灯片,记者会制作两张幻灯片。我的想法是,如果

我有一个闪亮的仪表板应用程序,可以显示大约15个图表。我使用ReporteRs允许用户下载包含图表的powerpoint报告;每张幻灯片一张。现在,我为每个图表添加了一些复选框,我想知道如何使报表生成动态化,这样,如果用户选中一个图表,则只生成一张幻灯片;如果他们选择两张图表,则生成两张幻灯片,依此类推

这里有一个简单的例子。我有两张图表。如果我在“下载”选项卡上取消选择一张幻灯片,我如何告诉记者我只想要一张带有所选图表的幻灯片?如果我同时选中这两张幻灯片,记者会制作两张幻灯片。我的想法是,如果我能解决这个问题,我只需扩大到所需的15

谢谢,安德鲁

library(shiny)
library(ReporteRs)

# Define UI for application that draws a histogram
#ui <- fluidPage(

ui <- fluidPage(
  titlePanel("Powerpoint Report"),
  mainPanel(
    tabsetPanel(
      tabPanel(
        title = "Plots",
        solidHeader = FALSE,
        HTML("<br /><br /><br />"),
        fluidRow(
          column(width = 6,
                 plotOutput("barPlot1")
                 ),
          column(width = 6,
                 plotOutput("barPlot2")
                 )
          )
        ),
      tabPanel(
        title = "Download",
        solidHeader = FALSE,
        HTML("<br /><br /><br />"),
        checkboxGroupInput("down", "Select Charts",
                     choices = c("Cars Plot" = 1, "Iris Plot" = 2),
                     selected = list(1, 2)),
        HTML("<br /><br />"),
        downloadButton("download", "Download Powerpoint Report")
        )
      )
    )
  )

server <- function(input, output) {


  car <- function(){plot(cars$speed, cars$dist)}

  output$barPlot1 <- renderPlot(
    car()
  )

  iri <- function(){plot(iris$Sepal.Length, iris$Petal.Length)}


  output$barPlot2 <- renderPlot(
    iri()
  )

  output$download <- downloadHandler(
    file = "charts.pptx",
    content = function(file){
      doc = pptx( )
      doc <- addSlide(doc, "Title Slide")
      doc <- addTitle(doc,"How many Charts?")

      doc <- addSlide(doc, "Two Content")
      doc <- addTitle(doc,"Car Charts?")
      doc <- addPlot(doc, fun = function() car())

      doc <- addSlide(doc, "Two Content")
      doc <- addTitle(doc, "Iris Plot")
      doc <- addPlot(doc, fun = function() iri())

      writeDoc(doc, file)
    }
  )

}

# Run the application 
shinyApp(ui = ui, server = server)
库(闪亮)
图书馆(记者)
#为绘制直方图的应用程序定义UI

#ui您可以在
downloadHandler
中设置if条件,如下所示:

server <- function(input, output) {


  car <- function(){plot(cars$speed, cars$dist)}

  output$barPlot1 <- renderPlot(
    car()
  )

  iri <- function(){plot(iris$Sepal.Length, iris$Petal.Length)}


  output$barPlot2 <- renderPlot(
    iri()
  )

  output$download <- downloadHandler(
    file = "charts.pptx",
    content = function(file){
      doc = pptx( )
      doc <- addSlide(doc, "Title Slide")
      doc <- addTitle(doc,"How many Charts?")

      if(any(isolate(input$down) == 1)){
        doc <- addSlide(doc, "Two Content")
        doc <- addTitle(doc,"Car Charts?")
        doc <- addPlot(doc, fun = function() car())
      }

      if(any(isolate(input$down) == 2)){
        doc <- addSlide(doc, "Two Content")
        doc <- addTitle(doc, "Iris Plot")
        doc <- addPlot(doc, fun = function() iri())
      }


      writeDoc(doc, file)
    }
  )

}

server您可以在
downloadHandler
中设置if条件,如下所示:

server <- function(input, output) {


  car <- function(){plot(cars$speed, cars$dist)}

  output$barPlot1 <- renderPlot(
    car()
  )

  iri <- function(){plot(iris$Sepal.Length, iris$Petal.Length)}


  output$barPlot2 <- renderPlot(
    iri()
  )

  output$download <- downloadHandler(
    file = "charts.pptx",
    content = function(file){
      doc = pptx( )
      doc <- addSlide(doc, "Title Slide")
      doc <- addTitle(doc,"How many Charts?")

      if(any(isolate(input$down) == 1)){
        doc <- addSlide(doc, "Two Content")
        doc <- addTitle(doc,"Car Charts?")
        doc <- addPlot(doc, fun = function() car())
      }

      if(any(isolate(input$down) == 2)){
        doc <- addSlide(doc, "Two Content")
        doc <- addTitle(doc, "Iris Plot")
        doc <- addPlot(doc, fun = function() iri())
      }


      writeDoc(doc, file)
    }
  )

}
服务器