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

看板R_Language作者 (混沌的大氣)時間4年前 (2020/06/22 19:46), 編輯推噓2(208)
留言10則, 3人參與, 4年前最新討論串1/2 (看更多)
[問題類型]: 程式諮詢 [軟體熟悉度]: 使用者 [問題敘述]: 我在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 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 115.43.82.63 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1592826413.A.A46.html

06/22 20:06, 4年前 , 1F
你應該要偵測每一次按鍵的觸發 用observeEvent(input$stn
06/22 20:06, 1F

06/22 20:07, 4年前 , 2F
三個事件都要 包括 observeEvent(input$DD, {...})與 $EE
06/22 20:07, 2F

06/22 20:08, 4年前 , 3F
比如先設一個 evt <- reactiveValues(act=NA)
06/22 20:08, 3F

06/22 20:09, 4年前 , 4F
在observeEvent(input$DD,{req(input$DD);evt$act="DD"})
06/22 20:09, 4F

06/22 20:10, 4年前 , 5F
相同observeEvent(input$EE,{})和 input$stn都做類似的事
06/22 20:10, 5F

06/22 20:11, 4年前 , 6F
最後在你的renderPrint把evt$act回傳給verbatimTextOutpu
06/22 20:11, 6F

06/22 20:15, 4年前 , 7F
更正你選單想聽ok鍵 應該是聽input$obs.time.ok 不是$stn
06/22 20:15, 7F

06/22 20:18, 4年前 , 8F
推C大詳細解釋,shiny裡的按鈕都應該要搭配一個observe/obs
06/22 20:18, 8F

06/22 20:18, 4年前 , 9F
erveEvent來監聽才是正確的寫法
06/22 20:18, 9F

06/22 20:36, 4年前 , 10F
感謝C大 我來研究一下
06/22 20:36, 10F
文章代碼(AID): #1Uy9ejf6 (R_Language)
文章代碼(AID): #1Uy9ejf6 (R_Language)