作者gsuper (統計的巴比倫塔)
看板Statistics
標題[程式] R 的 apply 系列的速度
時間Wed Jun 16 19:51:28 2010
[軟體程式類別]:
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)
1F:推 Wush978:想要增加效率的話, 可能還是要R call C 06/16 20:52
2F:→ lin15:apply系列跟迴圈差不多慢 06/16 21:16
3F:→ cris122:直接用C寫比較快 06/16 21:19
我把 unlist() 和 sapply() 去掉以後
大約要跑 25 分
只在免強能接受的範圍
看來還是去研究一下 system.call 好了
請問各位大大 , 有沒有還不錯的 R call php 教學?
※ 編輯: gsuper 來自: 140.113.253.149 (06/16 21:43)
4F:→ clickhere:NC_list太大了,sapply又copy memory 63555次 06/17 01:16
5F:→ clickhere:sapply(1:6355,query.C,...) 06/17 01:16
6F:→ clickhere:query.C <- function(i){ sum(NC_list[[i]] == tmp) } 06/17 01:17
7F:→ clickhere:"_" 做變數名或函數名可能不太好. 06/17 01:18
8F:→ clickhere:或許可以考慮Biostring package 06/17 01:20
9F:→ clickhere:為什麼要用R呼叫PHP? 06/17 01:21
10F:→ clickhere:有試過 ?grep 06/17 01:27
11F:→ gsuper:明天玩一下再來報告 06/17 01:57
12F:→ domarch:改MATLAB會比較快一點.. 06/17 15:34
13F:→ gsuper:grep() 超棒!!! 06/17 19:10
請問 grep 有辦法找 exactly match 的字串嗎?
?grep 裡面好像沒有寫
0rz
※ 編輯: gsuper 來自: 140.113.239.247 (06/17 19:48)
14F:→ clickhere:goggle:龍門少尉 06/18 00:32