[問題] 用*apply或dplyr::do批次跑ANOVA

看板R_Language作者 (@_2;)時間10年前 (2015/11/17 16:23), 10年前編輯推噓1(102)
留言3則, 2人參與, 最新討論串1/2 (看更多)
[問題類型]: 程式諮詢(我想用R 做某件事情,但是我不知道要怎麼用R 寫出來) [軟體熟悉度]: 會GOOGLE然後依樣畫葫蘆寫分析程式 [問題敘述]: 手上有一筆資料,基本上要看在四個不同樣區(site)當中,物種種類(SpeciesType) 如何影響某個值(n),資料如:http://pastebin.com/qyLga5Za ,要跑ANOVA和TukeyHSD。 要用工人智慧自己寫一樣的程式碼四次目前是做得到的,但總想找到更聰明的方法。 理想上想要寫個程式一次把重要的統計欄位(如F-value, P-value...etc)整理出來。 看了各種資料,知道在R當中各種*apply是向量化處裡資料重要的指令, 我想做的工作理論上可以用*apply實現。 但目前只對基礎的apply比較熟悉,sapply/lapply今天摸一摸才比較懂, 而tapply/mapply還還沒有機會用過。 在股狗的過程當中也發現dplyr::do也可以做類似的工作,也查到了Wush978的簡略介紹, 但用一用還是有點卡住...是因為dplyr::do只能處裡data.frame的關係嗎? *apply或dplyr::do的參考資料都是這個網頁 http://goo.gl/WYJXtC [程式範例]: 1.用*apply的傳統方法,可以把aov塞進去。網頁用的是sapply,我改成lapply。 可以跑ANOVA還有TukeyHSD沒有問題 models <- lapply(unique((data$site)), function(ste) {aov(n~SpeciesType,data=data,subset=(site==ste))}) lapply(models,summary) # to summarize all the models lapply(models,TukeyHSD) 2. 改用dplyr::do來寫,用lm的方法來寫沒問題,但缺點是不能直接套用TukeyHSD data<-data %>% group_by(site) models <-data %>% do(mdls= lm(n~SpeciesType, data=.)) models %>% rowwise %>% do(data.frame(anova(.$mdls))) 3. 改用dplyr::do來寫,用aov,但怎麼寫都會吐錯誤訊息... data<-data %>% group_by(site) models <-data %>% do(mdls=aov(n~SpeciesType, data=.)) models %>% rowwise %>% do(data.frame(summary(.$mdls))) 錯誤訊息: Error in as.data.frame.default(x[[i]], optional = TRUE, stringsAsFactors = stringsAsFactors) : cannot coerce class "c("summary.aov", "listof")" to a data.frame [環境敘述]: R version 3.2.1 (2015-06-18) 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 LC_CTYPE=Chinese (Traditional)_Taiwan.950 [3] LC_MONETARY=Chinese (Traditional)_Taiwan.950 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] tidyr_0.2.0 readxl_0.1.0 ggplot2_1.0.1 dplyr_0.4.2 plyr_1.8.3 loaded via a namespace (and not attached): [1] Rcpp_0.11.6 knitr_1.10.5 magrittr_1.5 MASS_7.3-41 munsell_0.4.2 [6] colorspace_1.2-6 R6_2.0.1 stringr_1.0.0 tools_3.2.1 parallel_3.2.1 [11] grid_3.2.1 gtable_0.1.2 DBI_0.3.1 htmltools_0.2.6 yaml_2.1.13 [16] lazyeval_0.1.10 assertthat_0.1 digest_0.6.8 reshape2_1.4.1 rmarkdown_0.7 [21] labeling_0.3 stringi_0.5-2 scales_0.2.5 proto_0.3-10 [關鍵字]: *apply, dplyr::do -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.130.96.14 ※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1447748638.A.996.html ※ 編輯: helixc (140.130.96.14), 11/17/2015 16:24:52

11/17 21:31, , 1F
你先寫好對一個物種的分析再來吧. 這樣對你比較好
11/17 21:31, 1F

11/17 23:07, , 2F
我要做的分析有做出來啊,物種本身在這個分析不重要
11/17 23:07, 2F

11/17 23:08, , 3F
要看的只有某個值(n)在不同SpeciesType的狀況而已…
11/17 23:08, 3F
文章代碼(AID): #1MIkGUcM (R_Language)
文章代碼(AID): #1MIkGUcM (R_Language)