作者clsmbstu ()
看板R_Language
標題[問題] Shiny app中對input使用which函數
時間Sat Feb 18 18:22:18 2017
[問題類型]:
程式諮詢(我想用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
→ clsmbstu: 我靈機一動,把airquality的月份改成英文,順利解決! 02/18 21:19
→ clsmbstu: 但還是不懂為什麼input無法用which來比對... 02/18 21:19
推 clansoda: 因為你的資料本來就沒有英文月份 他抓不到 02/18 21:37
→ clansoda: switch function might work 02/18 21:43
推 cywhale: match(input$month,month.name[5:9])+4L 02/18 21:53
→ cywhale: data = subset(airquality, Month == month_selected()) 02/18 21:53
→ clsmbstu: clansoda,但是我比對的對象並不是我的資料啊? @@" 02/18 22:10
→ clsmbstu: cywhale,我沒想到match,感謝你! 02/18 22:12
→ clsmbstu: 如此應該match(input$month, month.name)也可以 晚點試 02/18 22:13
→ clsmbstu: 好奇input$month究竟是什麼資料結構,==會不能用? 02/18 22:14
→ cywhale: 是的,只要傳回正確的index即可,資料是數字,input是 02/18 22:15
→ cywhale: 月份當然不行..另外 Month==那一行subsetting也有bug如上 02/18 22:16
→ cywhale: input$month就是傳回你自己寫的choices.. 02/18 22:17
→ cywhale: 下次你若不確定到底傳回來什麼,就print(input$..) debug 02/18 22:18
→ clsmbstu: 對!我也發現了Month == 那一行有問題! 02/18 22:25
→ clsmbstu: 我寫Month == month_selected,少了小括號 02/18 22:26
→ clsmbstu: 很可能問題是出在這邊 而非which函數 02/18 22:27
→ clsmbstu: 第一次寫Shiny真的不太熟,感謝大家! :D 02/18 22:27
※ 編輯: clsmbstu (114.42.143.128), 02/18/2017 23:33:10