【问题标题】:Shiny silent validate in observeEvent?观察事件中闪亮的无声验证?
【发布时间】:2017-01-12 18:11:02
【问题描述】:

我试图在我闪亮的应用程序的observeEvent 部分中使用validate 语句,但是当条件不满足时,不会返回任何错误消息。它只是一个空白屏幕。这是一个可重现的示例:

require(shiny)
runApp(
  list(
    ui = pageWithSidebar(
      headerPanel("test"),
      sidebarPanel(
        p("Demo Page."),
        sliderInput("sldr", "Select a value", min = 0, max = 10, value = 5),
        actionButton("btn", "Push Me!")
      ),
      mainPanel(
        verbatimTextOutput("text")
      )
    ),
    server = function(input, output){

      observeEvent(input$btn, {

        validate(
          need(input$sldr > 5, "Require > 5")
        )

        output$text <- renderText({
          "hello world"
        })
      })
    }
  )
)

现在,当我启动应用程序并按下 Push Me! 操作按钮时,什么也没有发生(validate 正在停止处理)但没有返回错误消息,只是一个白屏。如果我将选定的值更改为6,那么它会继续并打印消息。

为什么validate 没有显示?

【问题讨论】:

  • 我回答了,但我认为你至少和我一样熟悉 Shiny :)。

标签: r shiny


【解决方案1】:

我猜是因为observeEvent 没有将消息发送到的地方。将 validate 推送到 print 中按您希望的方式工作,并且对我来说更有意义。

但这可能不是您所需要的。例如,不确定整个observeEvent 命令是否已终止。

require(shiny)
runApp(
  list(
    ui = pageWithSidebar(
      headerPanel("test"),
      sidebarPanel(
        p("Demo Page."),
        sliderInput("sldr","Select a value",min = 0,max = 10,value = 5),
        actionButton("btn","Push Me!")
      ),
      mainPanel(
        verbatimTextOutput("text")
      )
    ),
    server = function(input,output) {

      observeEvent(input$btn,{

        output$text <- renderText({
          validate(
            need(input$sldr > 5,"Require > 5")
          )
          "hello world"
        })
      })
    }
  )
)

产量:

【讨论】:

  • 嗯...似乎是这样。它在这种情况下有效,但是当有一些预处理来制作将在多个渲染语句中使用的对象时,事情会变得复杂。我不希望多次打印相同的错误,也不希望出现其他无法解释的错误。感谢您的想法,但也许observeEvent 有更好的解决方案?
  • 用普通的if 逻辑就可以了?不太清楚您要完成什么,但感谢您的投票。
猜你喜欢
  • 1970-01-01
  • 2022-01-17
  • 2015-11-29
  • 1970-01-01
  • 2018-05-26
  • 2016-07-25
  • 2019-03-12
  • 2020-05-11
  • 2019-06-11
相关资源
最近更新 更多