gpt4 book ai didi

r - 通过成功的字符串替换来提高循环的性能?

转载 作者:行者123 更新时间:2023-12-03 18:17:59 25 4
gpt4 key购买 nike

我有 (html-) 文本,我想更改 ö像 ä、ü、ö 等真实字符,否则 xml-package 不接受它。

所以我写了一个小函数,它循环替换表( link1link2 )并且确实用 sp 用特殊字符替换特殊字符......该函数看起来像这样(只有更久):

html.charconv <- function(text){
replacer <- matrix(c(
"Á", "&Aacute;",
"á", "&aacute;",
"Â", "&Acirc;",
"â", "&acirc;",
"´", "&acute;"
)
,ncol=2,byrow=T)

for(i in 1:length(replacer[,1])){
text <- str_replace_all(text,replacer[i,2],replacer[i,1])
}
text
}

我怎样才能加快速度? 我考虑过矢量化,但没有提供任何帮助解决方案,因为对于每个周期,最后一个周期的结果是它的起点。

最佳答案

您可以通过构建稍微不同的函数来获得显着的加速,而忘记文本工具。基本上你:

  • 拆分字符串
  • 匹配您想要的字符并用新字符替换它们
  • 再次粘贴所有内容

  • 您可以使用以下功能做到这一点:
    html.fastconv <- function(x,old,new){
    xs <- strsplit(x,"&|;")
    old <- gsub("&|;","",old)
    xs <- lapply(xs,function(i){
    id <- match(i,old,0L)
    i[id!=0] <- new[id]
    return(i)
    })
    sapply(xs,paste,collapse="")
    }

    这可以作为:
    > sometext <- c("&Aacute;dd som&aacute; le&Acirc;tter&acirc; acute problems et&acute; cetera",
    + "&Aacute;dd som&aacute; le&Acirc;tter&acirc; acute p ..." ... [TRUNCATED]

    > newchar <- c("Á","á","Â","â","´")

    > oldchar <- c("&Aacute;","&aacute;","&Acirc;","&acirc;","&acute;")
    > html.fastconv(sometext,oldchar,newchar)
    [1] "Ádd somá leÂtterâ acute problems et´ cetera" "Ádd somá leÂtterâ acute problems et´ cetera"

    作为记录,一些基准测试:
    require(rbenchmark)
    benchmark(html.fastconv(sometext,oldchar,newchar),html.charconv(sometext),
    columns=c("test","elapsed","relative"),
    replications=1000)
    test elapsed relative
    2 html.charconv(sometext) 0.79 5.643
    1 html.fastconv(sometext, oldchar, newchar) 0.14 1.000

    关于r - 通过成功的字符串替换来提高循环的性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13581465/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com