作者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