2017-10-13 67 views
1

警告我,有許多投入和使用的actionButton()做一些計算是需要時間的不平凡量包括閱讀一些文件,並繪製地圖的應用。閃亮 - 檢測輸入的變化與Ui.R

在一些用戶測試,一些反饋需要調整輸入是非直觀的後重新按actionButton()。我想呈現一個警告消息(讀「有用的提示」),用戶需要重新按actionButton()。我想,如果這條消息只有輸入之後呈現的是因爲actionButton()的最後一次新聞改變。

到目前爲止,我還用「eventReactive()」內的全局變量和嘗試使用identical()沒有運氣嘗試。

我的問題是:我怎樣才能使一個有益的提醒再次按下時,自最後一次任意輸入已經改變了按鈕被按下的actionButton()

這裏有許多輸入的應用程序,需要一些時間來輸出不同的是

## app.R ## 
library(shiny) 
library(shinydashboard) 

ui <- dashboardPage(
    dashboardHeader(), 
    dashboardSidebar(
    #arbritray inputs 
    sliderInput("in1", label = "Input 1", value=1,min=0,max=5), 
    sliderInput("in2", label = "Input 2", value=2,min=0,max=5), 
    sliderInput("in3", label = "Input 3", value=3,min=0,max=5), 
    actionButton("StartCalculation","Calculate") 
), 
    dashboardBody(
    textOutput("answer") 
) 
) 

server <- function(input, output) { 

    out <- eventReactive(input$StartCalculation,{ 
     Sys.sleep(2) #simulate long computation 
    input$in1+input$in2+input$in3 
    }) 

    output$answer <- renderText({ 
    out() 
    }) 
} 

shinyApp(ui, server) 
+1

試試這個https://stackoverflow.com/questions/37470226/blinking-loading-text-in-r-shiny –

回答

2

您可以使用您的服務器內保存的「地位」的一個小例子(改變或不變)。只要確保無論何時按了按鈕或輸入更改狀態得到更新。

library(shiny) 
library(shinydashboard) 

ui <- fluidPage(
    inputPanel(
    #arbritray inputs 
    sliderInput("in1", label = "Input 1", value=1,min=0,max=5), 
    sliderInput("in2", label = "Input 2", value=2,min=0,max=5), 
    sliderInput("in3", label = "Input 3", value=3,min=0,max=5), 
    actionButton("StartCalculation","Calculate") 
) 
    textOutput("answer"), 
    textOutput("status") 
) 

server <- function(input, output) { 
    status <- reactiveVal() 

    out <- eventReactive(input$StartCalculation,{ 
    status("up to date") 
    Sys.sleep(2) #simulate long computation 
    input$in1+input$in2+input$in3 
    }) 

    observeEvent({list(input$in1,input$in2,input$in3)}, 
       {status("Needs recalculation")}) 

    output$answer <- renderText({out()}) 

    output$status <- renderText({status()}) 
} 

shinyApp(ui, server) 
+0

完美的,一個非常好的解決方案! (對不起,在回答延遲) –