1

約 15 個のグラフを表示する Shiny ダッシュボード アプリがあります。ReporteRs を使用して、ユーザーがチャートを含むパワーポイント レポートをダウンロードできるようにしています。各スライドに 1 つ。各グラフにいくつかのチェックボックスを追加しましたが、ユーザーが 1 つのグラフをチェックすると、1 つのスライドのみが生成されるように、レポート生成を動的にする方法を知りたいと考えていました。2 つのグラフを選択すると、2 つのスライドが作成されます。

簡単な例を次に示します。私は2つのチャートを持っています。ダウンロード タブでいずれかの選択を解除した場合、選択したグラフを含む 1 つのスライドのみが必要であることを ReporteRs に伝えるにはどうすればよいですか? 次に両方をチェックすると、ReporteRs は 2 つのスライドを作成します。私の考えでは、これを解決できれば、必要な 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)
4

1 に答える 1