R Shiny Tabsets同时处理

时间:2014-02-13 15:05:21

标签: r shiny reactive-programming

我有一个R Shiny应用,可以计算不同标签集中的多个统计信息。由于计算量很大,我使用submitButton来防止反应。我的问题是现在每个计算(所有在不同的tabset中)都是将输出写入文件夹,我希望Shiny在初始化时为所有tabset写一个输出。遗憾的是,Shiny仅为tabset创建一个输出,该输出在初始化时处于活动状态。有没有办法告诉Shiny,它应该在初始化时为每个标签计算/渲染输出?

以下是Shiny [教程]的修改示例:(http://www.http://rstudio.github.io/shiny/tutorial/#more-widgets/

ui.R:

library(shiny)

# Define UI for dataset viewer application
shinyUI(pageWithSidebar(

  # Application title.
  headerPanel("More Widgets"),

  # Sidebar with controls to select a dataset and specify the number
  # of observations to view. The helpText function is also used to 
  # include clarifying text. Most notably, the inclusion of a 
  # submitButton defers the rendering of output until the user 
  # explicitly clicks the button (rather than doing it immediately
  # when inputs change). This is useful if the computations required
  # to render output are inordinately time-consuming.
  sidebarPanel(
    selectInput("dataset", "Choose a dataset:", 
                choices = c("rock", "pressure", "cars")),

    numericInput("obs", "Number of observations to view:", 10),

    helpText("Note: while the data view will show only the specified",
             "number of observations, the summary will still be based",
             "on the full dataset."),

    submitButton("Update View")
  ),

  # Show a summary of the dataset and an HTML table with the requested
  # number of observations. Note the use of the h4 function to provide
  # an additional header above each output section.
  mainPanel(
    tabsetPanel(
      tabPanel("Summary", verbatimTextOutput("summary")),
      tabPanel("Table", tableOutput("view"))

    )
  )
))

server.R:

library(shiny)
library(datasets)

# Define server logic required to summarize and view the selected dataset
shinyServer(function(input, output) {

  # Return the requested dataset
  datasetInput <- reactive({
    switch(input$dataset,
           "rock" = rock,
           "pressure" = pressure,
           "cars" = cars)
  })

  # Generate a summary of the dataset
  output$summary <- renderPrint({
    dataset <- datasetInput()

    capture.output(summary(dataset),file="summary.txt")

  })

  # Show the first "n" observations
  output$view <- renderTable({
    a<-head(datasetInput(), n = input$obs)

    capture.output(a,file="table.txt")

  })
})

1 个答案:

答案 0 :(得分:3)

我想你想要:

outputOptions(output, "summary", suspendWhenHidden = FALSE)
outputOptions(output, "view", suspendWhenHidden = FALSE)

将它放入您的服务器.R。让我(我们)知道这是否按预期工作。

文档:

http://www.inside-r.org/packages/cran/shiny/docs/outputOptions