2015-06-10 120 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)}) –