約 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)