1

R 中的 agrep 函数基于 C 代码并按原样执行。但是,我注意到从 R 中执行 agrep 与直接系统调用 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 的性能?

4

0 回答 0