闪亮-在Ui.R中检测输入的更改并发出警告

闪亮-在Ui.R中检测输入的更改并发出警告,r,shiny,R,Shiny,我有一个应用程序,有很多输入,它使用一个actionButton()来做一些计算,需要花费大量的时间,包括读取一些文件和绘制地图 在一些用户测试期间,一些反馈认为调整输入后需要重新按下actionButton(),这是不直观的。我想显示一条警告消息(阅读“帮助提醒”),用户需要重新按下actionButton()。我希望此消息仅在上次按下actionButton()后更改输入后才显示 到目前为止,我尝试在“eventReactive()”中使用全局变量,并尝试使用idential(),但运气不佳

我有一个应用程序,有很多输入,它使用一个
actionButton()
来做一些计算,需要花费大量的时间,包括读取一些文件和绘制地图

在一些用户测试期间,一些反馈认为调整输入后需要重新按下
actionButton()
,这是不直观的。我想显示一条警告消息(阅读“帮助提醒”),用户需要重新按下
actionButton()
。我希望此消息仅在上次按下
actionButton()
后更改输入后才显示

到目前为止,我尝试在“eventReactive()”中使用全局变量,并尝试使用
idential()
,但运气不佳

我的问题是:如果自上次按下按钮以来,任何输入都发生了更改,我如何提供有用的提示以重新按下
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)
##app.R##
图书馆(闪亮)
图书馆(shinydashboard)

ui您可以在服务器内部使用
reactiveVal
保存“状态”(已更改或未更改)。只要确保只要按下按钮或输入改变,状态就会更新

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)
库(闪亮)
图书馆(shinydashboard)

ui尝试这个完美的,非常好的解决方案!(很抱歉延迟回复)