[問題] Shiny在下拉選單與按鈕間的回傳值

作者: tytony (混沌的大氣)   2020-06-22 19:46:50
[問題類型]: 程式諮詢
[軟體熟悉度]: 使用者
[問題敘述]:
我在shiny建了一個單選的下拉式選單,選擇項目後點選OK按鈕執行
但由於實際運用時選單項目很多,想把常用選項另外設成幾個按鈕(DD, EE)
按下去不用點OK就能執行
但我目前的寫法只要點過DD或EE之後
從下拉選單選出AA~CC 再按OK都不會回傳新的選擇,回傳值都維持在DD或EE
(按過EE之後,點選DD也同樣不會回傳DD,感覺像按鈕按過後都變成True)
不知該如何寫才能正確傳回選擇的值
謝謝
[程式範例]:
ui <- fluidPage(
mainPanel(
selectizeInput("stn", label = "縣市",
choices = list("AA" = "AA", "BB" = "BB", "CC" = "CC"),
selected = "AA"),
actionButton("obs.time.ok", label = "OK"),
actionButton("DD", label = "DD"),
actionButton("EE", label = "EE"),
verbatimTextOutput("res")
))
server <- function(input, output) {
output$res = renderPrint({
stnid = NULL
if (input$obs.time.ok){stnid = isolate(input$stn)}
if (input$DD){stnid = "DD"}
if (input$EE){stnid = "EE"}
return(stnid)
})
}
shinyApp(ui = ui, server = server)
[環境敘述]:
R 4.0.0
[關鍵字]:
Shiny
作者: cywhale (cywhale)   2020-06-22 20:06:00
你應該要偵測每一次按鍵的觸發 用observeEvent(input$stn三個事件都要 包括 observeEvent(input$DD, {...})與 $EE比如先設一個 evt <- reactiveValues(act=NA)在observeEvent(input$DD,{req(input$DD);evt$act="DD"})相同observeEvent(input$EE,{})和 input$stn都做類似的事最後在你的renderPrint把evt$act回傳給verbatimTextOutpu更正你選單想聽ok鍵 應該是聽input$obs.time.ok 不是$stn
作者: locka (locka)   2020-06-22 20:18:00
推C大詳細解釋,shiny裡的按鈕都應該要搭配一個observe/observeEvent來監聽才是正確的寫法
作者: tytony (混沌的大氣)   2020-06-22 20:36:00
感謝C大 我來研究一下

Links booklink

Contact Us: admin [ a t ] ucptt.com