Performance 在R中加速文本处理

Performance 在R中加速文本处理,performance,r,optimization,text,Performance,R,Optimization,Text,我正在优化一个软件,最昂贵的代码行是文本处理代码行。通过分解程序并注释某些部分,我发现if语句中的一个小参数导致了程序中的大部分瓶颈。在声明中,它询问 allele1 %in% rownames(seqMat) 是true,如果是,则调用下面的语句。这个if语句循环了数千次,导致程序速度显著降低。我的问题是,如何更改该语句以帮助加快程序的速度?您可以对所有等位基因只调用一次%中的%并将其输出存储在循环中以供重用。以下是概念证明: a <- sample(1:1000, 100000, r

我正在优化一个软件,最昂贵的代码行是文本处理代码行。通过分解程序并注释某些部分,我发现if语句中的一个小参数导致了程序中的大部分瓶颈。在声明中,它询问

allele1 %in% rownames(seqMat)

是true,如果是,则调用下面的语句。这个if语句循环了数千次,导致程序速度显著降低。我的问题是,如何更改该语句以帮助加快程序的速度?

您可以对所有等位基因只调用一次%中的
%并将其输出存储在循环中以供重用。以下是概念证明:

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

对于所有等位基因,您只能在%
中调用一次
%,并将其输出存储在循环中以供重用。以下是概念证明:

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

尝试
any(alllel1==rownames(seqMat))
对于循环之前的所有等位基因,您可以在%
中调用
%一次,并存储其输出(布尔向量),以便在循环内重用。(这是假设你的循环超过了等位基因)你能提供更多的信息吗?为什么循环了这么多次?是否有检查过的等位基因列表或seqMat是众多文件中的一个?此外,下次使用
Rprof
。比注释和取消注释要好得多。尝试
any(alllel1==rownames(seqMat))
您可以在循环之前为所有等位基因调用一次
%in%
,并存储其输出(布尔向量),以便在循环内重用。(这是假设你的循环超过了等位基因)你能提供更多的信息吗?为什么循环了这么多次?是否有检查过的等位基因列表或seqMat是众多文件中的一个?此外,下次使用
Rprof
。比注释和取消注释要好得多。我有一些变量在for循环中作为第x列中的第I行重新分配,也就是说,我的Alleger1变量在循环的每个迭代中重新分配。这使事情变得更复杂一些。我有一些变量在for循环中作为第x列的第I行重新分配,也就是说,我的Alleger1变量在循环的每个迭代中重新分配。这使事情更加复杂。