2017-08-29 50 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'形式传入的已过滤数据。 –

相关问题