2015-06-10 94 views
0

我有一个R闪亮的应用程序,其中我有ui.R中定义的下拉框为lib,其值为c(“X”,“Y”,“Z”),还有一个复选框spcheck,它是定义为R shiny updateCheckboxInput

checkboxInput("spcheck","label1",value = FALSE)) 

其他条件使得可用此复选框只有当input$lib=Z并检查它将使一些事情出现。 当用户选择一个不同的库,比如说X,我想使spcheckFALSE,所以我下面的代码添加到server.R

observe({ 
      if (input$lib %in% c("X","Y")) 
      {cat("uncheck called 1 : ",input$spcheck,'\n') 
      updateCheckboxInput(session,"spcheck","label1,value = FALSE) 
      cat("uncheck called 2 : ",input$spcheck,'\n') 
      } 
      else return()        
     }) 

文本显示在控制台:

uncheck called 1 : TRUE 
uncheck called 2 : TRUE 

为什么它是不是使spcheck的值为假? 可能是我错过了一些非常微不足道的东西,但我无法弄清楚。 任何帮助?

回答

1

,因为它需要几毫秒的时间,因为你告诉闪亮,直到它实际发生更新输入。当您调用更新方法时,shiny必须向JavaScript发送消息以更改输入的值,一旦完成,JavaScript会向R发送一条消息,说明输入具有新值。但input变量不会在您拨打电话时立即更改,它只会在下次被动语句使用input$spcheck变量

+0

时才会有更新的值是否有解决方法?让它暂停几毫秒或什么? – Sri

+0

这是反应式编程设计的一个特点。如果你真的想要,你可以自己改变输入(在更新之后,执行'输入$ spcheck < - TRUE'或类似的东西),或者只是添加一个观察者来监听输入中的变化'observe({cat (输入$ spcheck)}) –