[問題] Shiny app中對input使用which函數

看板R_Language作者時間8年前 (2017/02/18 18:22), 8年前編輯推噓2(2017)
留言19則, 3人參與, 最新討論串1/1
[問題類型]: 程式諮詢(我想用R做某件事情,但是我不知道要怎麼用R寫出來) [軟體熟悉度]: 使用者(已經有用R做過不少作品) PS: 但是第一次接觸Shiny [問題敘述]: 我正在用R內建的airquality,練習做Shiny App。 我想達到的目標是,使用者可自行選擇: 1. 想看的月份(從五月到九月任一) 2. 關心的變數(溫度、輻射強度等任一) 我想說做精美一點,月份不要用阿拉伯數字讓使用者選, 而是真的可以從"May"、"June"、"July"...之中選一個, 我再依據使用者的選擇subset data frame, 但會出現錯誤訊息: Error in ==: comparison (1) is possible only for atomic and list types 如果我直接讓使用者從阿拉伯數字擇一就沒有問題。 [程式範例]: https://gist.github.com/anonymous/62410421333fd6fbca794ba64c6dbd65 裡面包含: server.R(我認為問題可能出在第6行) ui.R(請留意第12行的設計) [環境敘述]: R version 3.3.2 (2016-10-31) Platform: x86_64-w64-mingw32/x64 (64-bit) Running under: Windows 7 x64 (build 7601) Service Pack 1 locale: [1] LC_COLLATE=Chinese (Traditional)_Taiwan.950 [2] LC_CTYPE=Chinese (Traditional)_Taiwan.950 [3] LC_MONETARY=Chinese (Traditional)_Taiwan.950 [4] LC_NUMERIC=C [5] LC_TIME=Chinese (Traditional)_Taiwan.950 attached base packages: [1] stats graphics grDevices utils datasets methods base other attached packages: [1] ggplot2_2.2.1 shiny_1.0.0 loaded via a namespace (and not attached): [1] Rcpp_0.12.9 assertthat_0.1 digest_0.6.12 mime_0.5 [5] grid_3.3.2 R6_2.2.0 plyr_1.8.4 xtable_1.8-2 [9] jsonlite_1.2 gtable_0.2.0 scales_0.4.1 lazyeval_0.2.0 [13] labeling_0.3 tools_3.3.2 munsell_0.4.3 httpuv_1.3.3 [17] colorspace_1.3-2 htmltools_0.3.5 sourcetools_0.1.5 tibble_1.2 [關鍵字]: Shiny, which, comparison -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.42.143.128 ※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1487413342.A.7DD.html

02/18 21:19, , 1F
我靈機一動,把airquality的月份改成英文,順利解決!
02/18 21:19, 1F

02/18 21:19, , 2F
但還是不懂為什麼input無法用which來比對...
02/18 21:19, 2F

02/18 21:37, , 3F
因為你的資料本來就沒有英文月份 他抓不到
02/18 21:37, 3F

02/18 21:43, , 5F
switch function might work
02/18 21:43, 5F

02/18 21:53, , 6F
match(input$month,month.name[5:9])+4L
02/18 21:53, 6F

02/18 21:53, , 7F
data = subset(airquality, Month == month_selected())
02/18 21:53, 7F

02/18 22:10, , 8F
clansoda,但是我比對的對象並不是我的資料啊? @@"
02/18 22:10, 8F

02/18 22:12, , 9F
cywhale,我沒想到match,感謝你!
02/18 22:12, 9F

02/18 22:13, , 10F
如此應該match(input$month, month.name)也可以 晚點試
02/18 22:13, 10F

02/18 22:14, , 11F
好奇input$month究竟是什麼資料結構,==會不能用?
02/18 22:14, 11F

02/18 22:15, , 12F
是的,只要傳回正確的index即可,資料是數字,input是
02/18 22:15, 12F

02/18 22:16, , 13F
月份當然不行..另外 Month==那一行subsetting也有bug如上
02/18 22:16, 13F

02/18 22:17, , 14F
input$month就是傳回你自己寫的choices..
02/18 22:17, 14F

02/18 22:18, , 15F
下次你若不確定到底傳回來什麼,就print(input$..) debug
02/18 22:18, 15F

02/18 22:25, , 16F
對!我也發現了Month == 那一行有問題!
02/18 22:25, 16F

02/18 22:26, , 17F
我寫Month == month_selected,少了小括號
02/18 22:26, 17F

02/18 22:27, , 18F
很可能問題是出在這邊 而非which函數
02/18 22:27, 18F

02/18 22:27, , 19F
第一次寫Shiny真的不太熟,感謝大家! :D
02/18 22:27, 19F
※ 編輯: clsmbstu (114.42.143.128), 02/18/2017 23:33:10
文章代碼(AID): #1Og21UVT (R_Language)
文章代碼(AID): #1Og21UVT (R_Language)