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