下面是一個簡單的可重複的應用程序。我有兩個選項卡。選項卡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'形式傳入的已過濾數據。 –