下面是一个简单的可重复的应用程序。我有两个选项卡。选项卡1显示图表,而选项卡2显示图表和表格。当有光泽的应用程序加载时预载所有标签
我还在侧栏和Rmd文档中有一个下载按钮。
问题是,除非我选择Tab 2,否则我要下载的生成的html页面失败。当我选择Tab 2时,即使在下载前返回Tab 1,下载也能正常工作。很明显,这是部分原因是Tab 2上的电抗元件。
但是,我希望下载功能可以工作,不管我是否访问Tab 2.换句话说,当应用程序加载时,我只需单击下载按钮,然后单击生成的html页面将包含两个选项卡中的图表和表格。
是否有预加载标签2的方法?正如你所看到的,我已经尝试了suspendWhenHidden = FALSE的outputOptions函数,但它看起来没有工作。
请帮忙吗?
闪亮:
library(shiny)
library(rmarkdown)
data(mtcars)
ui <- fluidPage(
titlePanel("Preload Plots"),
sidebarPanel(
uiOutput("down")
),
mainPanel(
fluidRow(
tabsetPanel(
tabPanel("Panel 1",
plotOutput("plot1")
),
tabPanel("Panel 2",
uiOutput("selectList"),
plotOutput("plot2"),
tableOutput("tbl")
)
)
)
)
)
server <- function(input, output){
output$plot1 <- renderPlot({
barplot(mtcars$cyl)
})
output$selectList <- renderUI({
selectInput("selectionBox", "Select Cyl Size", unique(mtcars$cyl), selected = 4)
})
cylFun <- reactive(
mtcars[mtcars$cyl == input$selectionBox, c("mpg", "wt")]
)
output$plot2 <- renderPlot({
plot(cylFun())
})
outputOptions(output, "plot2", suspendWhenHidden = FALSE)
output$tbl <- renderTable(
table(cylFun())
)
outputOptions(output, "tbl", suspendWhenHidden = FALSE)
output$down <- renderUI({
downloadButton("downloadPlots", "Download Plots")
})
output$downloadPlots <- downloadHandler(
filename = "plots.html",
content = function(file){
params = list(p2 = cylFun())
render("plots.Rmd", html_document(), output_file = file)
}
)
}
shinyApp(ui, server
Rmarkdown:
---
title: "plots"
output: html_document
---
```{r, echo = FALSE}
barplot(mtcars$cyl)
```
```{r, echo = FALSE}
plot(params$p2)
knitr::kable(params$p2)
```
感谢
安德鲁
您是明星!我只是在注视着桌子。 Doooh。你所说的话是非常有意义和有效的。谢谢。 –
我想下一个问题是,selectList中的所有值都可以绘制在Tab 2的报告中,而无需专门选择它们? –
您的意思是对cyl的所有值进行绘图,而不是在第二个选项卡上选择的值。只需在Rmd文件中对它们进行迭代,然后使用数据框的完整版本,而不是以'param'形式传入的已过滤数据。 –