R中的agrep函数基于C代码并且如此执行。 但是,我注意到,与对agrep命令行可执行文件的直接系统调用相比,在R内执行agrep之间存在显着的(数量级)性能差距。 (到目前为止仅在Linux上测试过)
我的代码的本质是这个(x是250K字符串的向量,xNoisy是x中1000个随机采样字符串的向量,由几个随机字符修改):
system.time( sapply(xNoisy, FUN = agrep, x=x,max.distance = 2))
system.time(for (p in xNoisy) tmp=system(paste0("agrep -2 ", p, " strings.txt"),intern=TRUE) )
(这里strings.txt是包含x中字符串的文件。) 第一行需要700秒,第二行需要10秒(!)秒。 为什么这样,有没有办法更接近R?中的Linux agrep的性能?