加快R中的文本处理速度

时间:2012-12-13 01:29:41

标签: performance r optimization text

我正在努力优化一个软件,而最昂贵的行是代码的文本处理行。通过拆分程序并对某些部分进行评论,我发现if语句中的一个小参数正在导致程序中的大部分瓶颈。在声明中,它询问是否

allele1 %in% rownames(seqMat)

是真的,如果是这样,将调用后面的语句。此if语句循环数千次,导致程序显着减慢。我的问题是,如何更改该声明以帮助加快该计划?

1 个答案:

答案 0 :(得分:4)

您只能为所有等位基因调用%in%一次,并将其输出存储在循环内以供重复使用。这是一个概念证明:

a <- sample(1:1000, 100000, replace = TRUE)
b <- -1000:1000

system.time({
    stored <- a %in% b
    for (i in seq_along(a))
        stored[i]
}) 
#    user  system elapsed 
#   0.056   0.001   0.056 

system.time({
    for (i in seq_along(a))
        a[i] %in% b
})
#    user  system elapsed 
#   3.634   0.374   3.957

另外,Hadley关于使用any==的建议并没有那么大的改进:

system.time({
    for (i in seq_along(a))
        any(a[i] == b)
})
#    user  system elapsed 
#   1.661   0.164   1.835