在R中如何加速这样的for循环?

在R中如何加速这样的for循环?,r,performance,for-loop,apply,R,Performance,For Loop,Apply,我的代码有一个for循环,它需要运行很长时间。我想知道如何使用R中可用的一个apply系列函数来加速它 我要更改的for循环如下所示: for (i in range(1:200000)){ a[i] = gsub(pattern[i],new_pattern[i]) } 其中pattern和new_pattern都是列表。我想要实现的是将每行中的字符模式更改为新的字符模式。我尝试了以下方法: sapply(c(1:200000),function(x) gsub(pattern[x]

我的代码有一个for循环,它需要运行很长时间。我想知道如何使用R中可用的一个apply系列函数来加速它

我要更改的for循环如下所示:

for (i in range(1:200000)){
    a[i] = gsub(pattern[i],new_pattern[i])
}
其中pattern和new_pattern都是列表。我想要实现的是将每行中的字符模式更改为新的字符模式。我尝试了以下方法:

sapply(c(1:200000),function(x) gsub(pattern[x],new_pattern[x], a[x]))
但这也需要很长时间。有没有关于如何改进代码以提高速度的建议

您可以使用命名向量从stringr包继续str_replace_all:

library(stringr)

x = 'dog likes cat very much'
str_replace_all(x, setNames(c('babyboy','babygirl'), c('dog','cat')))

#[1] "babyboy likes babygirl very much"
性能:提高7-8倍

set.seed(1)
x = paste0(sample(c(letters,' '), 100000, replace=T, prob=c(rep(1/39, 26), 1/3)), collapse='')

patt = apply(df, 1, paste0, collapse='')
repl = as.character(1:456976)

system.time({
    for (i in 1:456976){
        x = gsub(patt[i],repl[i], x)
    }
})
#   user  system elapsed 
#1574.41    2.41 1582.71

system.time(str_replace_all(x, setNames(repl, patt)))
#   user  system elapsed 
# 194.04    0.14  194.36

欢迎来到StackOverflow!请阅读相关信息以及如何给出建议。这将使其他人更容易帮助您。循环是完全不必要的,gsub和基本包中的几乎所有函数一样,都已经矢量化了。只需执行gsubpatter,即新的_模式,a即可。正如@kliron所说,R中的许多函数都是矢量化的。For循环有其用途,但很少需要。@kliron不太需要,gsub不能接受模式和替换的向量。它只在x上矢量化。这就是OP需要提供一个可复制的例子的原因。如果你所关心的只是加速一个循环,尝试与“foreach”并行,你知道str_replace_all的性能与gsub上的循环相比如何吗?我认为str_替换_都应该更快。。。