2017-08-29 47 views
0

下面是一個簡單的可重複的應用程序。我有兩個選項卡。選項卡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) 

``` 

感謝
安德魯

回答

0

你有正確的想法,suspendWhenHidden似乎是關鍵。問題在於Rmd渲染需要cylFun才具有值,而cylFun則取決於您使用renderUI創建的selectionBox輸入值。您有圖表和表格的suspendWhenHidden選項,但是如果沒有selectionBox,則不能計算這些選項,並且降價沒有它們。

所以只需添加

outputOptions(output, "selectList", suspendWhenHidden = FALSE) 

,它應該工作。您也可以刪除表格的outputOptions和標籤2的圖表。

+0

您是明星!我只是在注視着桌子。 Doooh。你所說的話是非常有意義和有效的。謝謝。 –

+0

我想下一個問題是,selectList中的所有值都可以繪製在Tab 2的報告中,而無需專門選擇它們? –

+0

您的意思是對cyl的所有值進行繪圖,而不是在第二個選項卡上選擇的值。只需在Rmd文件中對它們進行迭代,然後使用數據框的完整版本,而不是以'param'形式傳入的已過濾數據。 –

相關問題