我有一个很长的字符向量(例如“Hello World”等),170 万行,我需要使用两个向量之间的映射来替换其中的单词,并将结果保存在同一个向量中。这是一个简单的例子:
library(qdap)
line = c("one", "two one", "four phones")
e = c("one", "two")
r = c("ONE", "TWO")
line = mgsub(e,r,line)
Result:
[1] "ONE" "TWO ONE" "four phONEs"
如您所见,每个实例e[j]
在线被替换为r[j]
并且只有r[j]
。
它在相对较小的“线路”上工作得很好并且e->r
词汇长度,但是当我继续前进时length(line) = 1700000
and length(e) = 750
,我达到了总分配内存:
Reached total allocation of 7851Mb: see help(memory.size)
有什么想法如何避免它?
The stringi包为许多字符串操作提供了快速一致的工具:
stri_replace_all_regex(line, paste0("\\b", e, "\\b"), r, vectorize_all = FALSE)
该死的几乎与其他方法一样快(相差几分之一秒)并且更直接。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)