[程式] R 的 apply 系列的速度

看板Statistics作者 (統計的巴比倫塔)時間15年前 (2010/06/16 19:51), 編輯推噓1(1013)
留言14則, 6人參與, 最新討論串1/1
[軟體程式類別]: R [程式問題]: 資料處理 [軟體熟悉度]: 中(3個月到1年) [問題敘述]: 下面這支程式 是要拿 45101 個字串對 130000 個字串做 query 我先前已經知道 R 的迴圈很慢 所以改用 apply 和 sapply 但以下的程式把兩種串起來後 又變的超慢 (要跑 1 個月 = =a) 請問變慢的原因就是因為把 apply 和 sapply 串起來嗎? 還是因為我大量的進行 unlist 才拖慢? [程式範例]: com_Symbol 是字串矩陣 ( 45101*1 ) NC_list 是 list , [[1]] ~ [[63555]] , 內部是 1~5 個字串 , 總數約 13 萬 ################################################ query_B <- function(input) { x <- sum( unlist(input) %in% tmp ) return(x) } query_A <- function(tmp) { tmp <<- tmp index <- sapply(NC_list,query_B,simplify=T) index2 <- which(index) return(index2) } treasure <- apply( com_Symbol , 1 , query_A) ----------------------------------------------------------------------------- -- -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.239.247 ※ 編輯: gsuper 來自: 140.113.239.247 (06/16 20:07) ※ 編輯: gsuper 來自: 140.113.239.247 (06/16 20:08)

06/16 20:52, , 1F
想要增加效率的話, 可能還是要R call C
06/16 20:52, 1F

06/16 21:16, , 2F
apply系列跟迴圈差不多慢
06/16 21:16, 2F

06/16 21:19, , 3F
直接用C寫比較快
06/16 21:19, 3F
我把 unlist() 和 sapply() 去掉以後 大約要跑 25 分 只在免強能接受的範圍 看來還是去研究一下 system.call 好了 請問各位大大 , 有沒有還不錯的 R call php 教學? ※ 編輯: gsuper 來自: 140.113.253.149 (06/16 21:43)

06/17 01:16, , 4F
NC_list太大了,sapply又copy memory 63555次
06/17 01:16, 4F

06/17 01:16, , 5F
sapply(1:6355,query.C,...)
06/17 01:16, 5F

06/17 01:17, , 6F
query.C <- function(i){ sum(NC_list[[i]] == tmp) }
06/17 01:17, 6F

06/17 01:18, , 7F
"_" 做變數名或函數名可能不太好.
06/17 01:18, 7F

06/17 01:20, , 8F
或許可以考慮Biostring package
06/17 01:20, 8F

06/17 01:21, , 9F
為什麼要用R呼叫PHP?
06/17 01:21, 9F

06/17 01:27, , 10F
有試過 ?grep
06/17 01:27, 10F

06/17 01:57, , 11F
明天玩一下再來報告
06/17 01:57, 11F

06/17 15:34, , 12F
改MATLAB會比較快一點..
06/17 15:34, 12F

06/17 19:10, , 13F
grep() 超棒!!!
06/17 19:10, 13F
請問 grep 有辦法找 exactly match 的字串嗎? ?grep 裡面好像沒有寫 0rz ※ 編輯: gsuper 來自: 140.113.239.247 (06/17 19:48)

06/18 00:32, , 14F
goggle:龍門少尉
06/18 00:32, 14F
文章代碼(AID): #1C6Bh3ud (Statistics)