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