簡體   English   中英

閃亮:允許反應性由用戶選擇

[英]Shiny: allow reactivity to be user-selectable

我正在構建一個包含多個選項卡的應用程序,其中一些涉及過多的計算,另一些涉及快速計算。 允許用戶在反應性或手動更新之間進行選擇的復選框與“刷新”按鈕相結合將是理想的。

下面的簡單示例說明了我的目標。 它幾乎可以工作,除了在“自動刷新” - 檢查框未選中時最后一次刷新,這是一個痛苦,如果計算密集的選項卡打開。 有沒有辦法解決?

ui.r

library(shiny)
shinyUI(fluidPage(
    titlePanel("Test"),
    sidebarLayout(
        sidebarPanel(
            checkboxInput("autoRefresh", "Automatically refresh", TRUE),
            actionButton("refresh", "Refresh!"),
            radioButtons("choice", "Choice of value:",
                c("10" = 10,
                "20" = 20))
            ),

        mainPanel(
            tabsetPanel(type = "tabs", 
                tabPanel("Add random decimals to value", textOutput("value"))
            )
        )
    )
))

server.r

library(shiny)
shinyServer(function(input, output) {
    output$value <- renderText({

        input$refresh
        if(input$autoRefresh == 1) {
            input$choice
        }
        isolate({
            output <- runif(1,0,1) + as.numeric(input$choice)
        })
    })
})

提前謝謝了!

您可以緩存輸出並快捷方式 - 在適當的時候返回它

library(shiny)
shinyServer(function(input, output) {
  output$value <- renderText({

    input$refresh
    if(input$autoRefresh == 1) {
      input$choice
    } else return(cachedOutput)
    isolate({
      cachedOutput <<- output <- runif(1,0,1) + as.numeric(input$choice)
    })
  })
})

在這個解決方案中,我創建了兩個觀察者:一個用於何時refresh按鈕,另一個用於何時更改choice 第一個總是更新輸出。

第二個檢查input$autoRefresh的狀態,然后退出或更新renderText

不幸的是,你必須編寫兩次runif命令,這對於更新你的代碼是不利的(如果你做了兩次更容易引入錯誤)。 在實踐中,您可能想要創建一個新函數,然后只需調用該函數,如果這是您實際應用程序中的復雜/多行過程。

  shinyServer(function(input, output) {
    observe({
      input$refresh
      output$value<-renderText({
        isolate(runif(1,0,1) + as.numeric(input$choice))
        })
      })
    observe({
      input$choice
      output$value<-if(input$autoRefresh==0) return() else {
          renderText({isolate(runif(1,0,1) + as.numeric(input$choice))})
      }  
    })
  })

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM