Re: [問題] while loop 不知道怎麼寫

看板R_Language作者 (俐俐)時間7年前 (2017/04/05 01:46), 編輯推噓0(006)
留言6則, 1人參與, 最新討論串3/3 (看更多)
一部分原始資料 ## Distance matrix #實際上有十幾個站位 COM01 AR01 PA01 PA02 COM01 0 8 112 110 AR01 8 0 118 116 PA01 112 118 0 4 PA02 110 116 4 0 ## spp matrix #實際上有十萬多個物種 COM01 AR01 PA01 PA02 OTU1 7774 4 310 12 OTU2 5 0 81 9 OTU3 0 0 71 1 OTU4 1 0 0 0 把error的資訊跟traceback留在下面: Error in dist.mat[pair[1], pair[2]] : subscript out of bounds 19. FUN(newX[, i], ...) 18. apply(., 2, function(pair) { dist.mat[pair[1], pair[2]] }) 17. function_list[[i]](value) 16. freduce(value, `_function_list`) 15. `_fseq`(`_lhs`) 14. eval(expr, envir, enclos) 13. eval(quote(`_fseq`(`_lhs`)), env, env) 12. withVisible(eval(quote(`_fseq`(`_lhs`)), env, env)) 11. y[y != 0] %>% names(.) %>% combn(., 2) %>% apply(., 2, function(pair) { dist.mat[pair[1], pair[2]] }) %>% max(.) 10. FUN(newX[, i], ...) 9. apply(., 1, function(y) { if (sum(y >= 2)) { y[y != 0] %>% names(.) %>% combn(., 2) %>% apply(., 2, function(pair) { ... 8. function_list[[k]](value) 7. withVisible(function_list[[k]](value)) 6. freduce(value, `_function_list`) 5. `_fseq`(`_lhs`) 4. eval(expr, envir, enclos) 3. eval(quote(`_fseq`(`_lhs`)), env, env) 2. withVisible(eval(quote(`_fseq`(`_lhs`)), env, env)) 1. OTU_location[, c("COM01", "AR01", "PA01", "PA02", "GJ01", "QK01", "AK03", "SH01", "SI02", "TA01", "GG01", "DSZ01", "SM22", "LGH03")] %>% as.matrix %>% apply(., 1, function(y) { if (sum(y >= 2)) { ... ※ 引述《andrew43 (討厭有好心推文後刪文者)》之銘言: : 大致上這樣做。 : ## site 座標 : location <- : data.frame( : site.name = c("site1", "site2", "site3"), : x = c(3,1,16), : row.names = 1 : ) : ## site 距離矩陣 : dist.mat <- : dist(as.matrix(location)) %>% : as.matrix : dist.mat : ## 各site物種出現豐度 : spp.dt <- : data.frame( : spp = c("A", "B"), : site1 = c(5,4), : site2 = c(0,7), : site3 = c(20,2) : ) : library(magrittr) : spp.dt[, c("site1", "site2", "site3")] %>% : as.matrix %>% : apply(., 1, function(y) { : y[y != 0] %>% : names(.) %>% : combn(., 2) %>% : apply(., 2, function(pair) { : dist.mat[pair[1], pair[2]] : }) %>% : max(.) : }) : ※ 引述《lilian0330 (俐俐)》之銘言: : : 大家好,剛開始統計軟體入門,寫過Matlab跟R : : 但最近在處理資料常常不知道怎麼解決error... : : [問題] : : 要做物種出現的「最大距離」,例如有三個地點,在三個點之間有三個不相等的距離。 : : 而物種A出現在site1跟site3,所以距離就是distance(1-3) : : 物種B出現在site1,2,3,但因為2跟3比較遠,最大距離是distance(2-3) : : 我目前已經做出來兩兩site之間的distance matrix : : 但是我不知道用while迴圈怎麼讓R自動判斷這個物種的「最大距離」 : : 資料形式 : : Species| site1 | site2 | site3 | max_distance : : ------------------------------------------------------- : : A | 5 | 0 | 20 | distance(1-3) : : B | 4 | 7 | 2 | distance(2-3) : : 我目前想到的邏輯是 : : table[1,2]-table[1,3]!=table[1,2]|table[1,3] : : 依序做成這個物種的「所有距離」,最後再用max()選擇「最大距離」 : : 想問問大家如果寫成while loop怎麼寫比較好呢? : : [環境敘述]: : : R version 3.3.2 (2016-10-31) : : Platform: x86_64-w64-mingw32/x64 (64-bit) : : Running under: Windows >= 8 x64 (build 9200) : : 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] sp_1.2-4 phyloseq_1.19.1 BiocInstaller_1.24.0 : : readxl_0.1.1 ggplot2_2.2.1 : : [6] vegan3d_1.0-1 vegan_2.4-2 lattice_0.20-34 : : permute_0.9-4 : : loaded via a namespace (and not attached): : : Error in x[["Version"]] : subscript out of bounds : : In addition: Warning messages: : : 1: In FUN(X[[i]], ...) : : : DESCRIPTION file of package 'Rcpp' is missing or broken : : 2: In FUN(X[[i]], ...) : : : DESCRIPTION file of package 'jsonlite' is missing or broken -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.112.69.189 ※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1491327979.A.06C.html

04/05 05:35, , 1F
資料和你差不多大的例子 http://tinyurl.com/luhs2hs
04/05 05:35, 1F

04/05 05:37, , 2F
改用for loop寫,慢很多但夠應付了。
04/05 05:37, 2F

04/05 05:38, , 3F
會額外回傳最遠的二個site名
04/05 05:38, 3F

04/05 05:40, , 4F
建議你還是提何「可重覆錯誤的確實資料與R code」不然
04/05 05:40, 4F

04/05 05:40, , 5F
一直隔空抓藥會浪費彼此時間。
04/05 05:40, 5F

04/05 05:41, , 6F
s/提何/提供/
04/05 05:41, 6F
文章代碼(AID): #1Ouzlh1i (R_Language)
文章代碼(AID): #1Ouzlh1i (R_Language)