当前位置:  开发笔记 > 编程语言 > 正文

在不使用for循环的情况下将字符串解析为n-gram -R

如何解决《在不使用for循环的情况下将字符串解析为n-gram-R》经验,为你挑选了1个好方法。

我想编写一个将字符串分成三元组列表的函数,例如

"JOHNSTEWART" --> chr [1:9] "JOH" "OHN" "HNS" "NST" "STE" "TEW" "EWA" "WAR" "ART"

我可以用for循环写这个,

ngram_function <- function(x){
  if(!is.na(x)&(nchar(x)>2)){
    ngram <- rep("n", n= nchar(x)-3+1)
    for (i in c(1:nchar(x)-2)){
      ngram[i] <-(substr(x, start =i,stop= i-1+3))
    }
    return(ngram)
  }
  else{
     return(x)
  }
}

但是需要很长时间来扩展大量值,是否有其他R优化版本可以做到这一点?



1> jeremycg..:

这是一个使用的版本sapply:

myfun <- function(x, n){
  sapply(1:(nchar(x)-n+1), function(z) substr(x, z, z+n-1))
}

myfun("JOHNSTEWART", 3)
[1] "JOH" "OHN" "HNS" "NST" "STE" "TEW" "EWA" "WAR" "ART"
myfun("JOHNSTEWART", 4)
[1] "JOHN" "OHNS" "HNST" "NSTE" "STEW" "TEWA" "EWAR" "WART"

推荐阅读
ifx0448363
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有