R-反应函数的过程计算

  • 本文关键字:过程 计算 函数 r shiny
  • 更新时间 :
  • 英文 :


我有一个shinyapp,必须在显示一组图和数据之前计算一个漫长的过程。我将其放在一个反应性对象中以执行操作,然后在不重新计算的情况下切换。

当反应性对象正常工作时,如何在每个选项卡中添加"计算中的计算"框?

我已经尝试过,但是它不起作用,或者至少我不知道将标签放在哪里:

https://gist.github.com/withr/8799489

欢迎任何帮助,这是一个例子:

library("shiny")
library("shinydashboard")
shinyApp(
  ui=shinyUI(dashboardPage(skin = "blue",
                           dashboardHeader(title = "Dashboard"),
                           dashboardSidebar(
                             sliderInput("obs", "Number of observations:", 
                                         min = 10000, max = 90000, value = 50000, step = 10000)
                           ),
                           dashboardBody(
                             tabBox(
                               tabPanel("Tab 1", "This is tab number 1", tableOutput("tabData")),
                               tabPanel("Tab 2", "This is tab number 2", plotOutput("tabPlot"))
                             )
                           )
  ))
  ,
  server=shinyServer(function(input, output) {
    calculate_hist <- reactive({
      cat("Calculating for ",input$obs,"n")
      if (is.null(input$obs)) {
        dist <- NULL
      }else{
        dist<-numeric()
        for (i in 1:input$obs) dist <- c(dist, rnorm(1))
      }
      cat("Endedn")
      dist
    })
    output$tabPlot<-renderPlot({
      chist<-calculate_hist()
      if (is.null(chist)){
        return()
      }else{
        hist(chist, breaks = 100)
      } 
    })
    output$tabData<-renderTable({
      chist<-calculate_hist()
      if (is.null(chist)){
        return()
      }else{
        sumdata<-data.frame(n=length(chist),mean=mean(chist),var=var(chist))
        sumdata
      }
    })
  })
)

您可以使用shinysky软件包中使用busyIndicator函数,并使用shinyjs软件包使用inlineCSS覆盖其CSS。

类似的东西:

  library(shiny)
  library(shinydashboard)
  library(shinysky)
  library(shinyjs)
  shinyApp(
    ui=shinyUI(dashboardPage(skin = "blue",
                             dashboardHeader(title = "Dashboard"),
                             dashboardSidebar(
                               sliderInput("obs", "Number of observations:", 
                                           min = 10000, max = 90000, value = 50000, step = 10000)
                             ),
                             dashboardBody(
                               useShinyjs(),
                               tags$body(inlineCSS(list(".shinysky-busy-indicator" = "position: absolute !important; z-index:800; "))),
                               tabBox(
                                 tabPanel("Tab 1", 
                                          busyIndicator(wait = 1000),
                                          "This is tab number 1",
                                          tableOutput("tabData")),
                                 tabPanel("Tab 2", 
                                          busyIndicator(wait = 1000),
                                          "This is tab number 2", 
                                          plotOutput("tabPlot"))
                               )
                             )
    ))
    ,
    server=shinyServer(function(input, output) {
      calculate_hist <- reactive({
        cat("Calculating for ",input$obs,"n")
        if (is.null(input$obs)) {
          dist <- NULL
        }else{
          dist<-numeric()
          for (i in 1:input$obs) dist <- c(dist, rnorm(1))
        }
        cat("Endedn")
        dist
      })
      output$tabPlot<-renderPlot({
        chist<-calculate_hist()
        if (is.null(chist)){
          return()
        }else{
          hist(chist, breaks = 100)
        } 
      })
      output$tabData<-renderTable({
        chist<-calculate_hist()
        if (is.null(chist)){
          return()
        }else{
          sumdata<-data.frame(n=length(chist),mean=mean(chist),var=var(chist))
          sumdata
        }
      })
    })
  )

希望它有帮助!

最新更新