gpt4 book ai didi

r - 在 r 中使用 grep 和非常大的正则表达式向量

转载 作者:行者123 更新时间:2023-12-01 19:43:20 25 4
gpt4 key购买 nike

我有一个相当大的向量(table),其中包含 325k 个独特的观察值,我想将其用作正则表达式列表,以在另一个向量(data)中查找匹配项26k 观测值。

我正在使用下面的代码,如果 table 和生成的正则表达式列表少于 3000 个条目,则效果很好(尽管我猜测是字符数而不是表达式作为一个漏洞)事项):

matches <- unique(grep(paste(table, collapse="|"), 
data$ID,
perl = TRUE,
value=FALSE))

但是如果“table”和正则表达式的结果列表比这个长,我会收到错误:

PCRE pattern compilation error - 'regular expression is too large'

我想要搜索的观察结果包含字符串模式的混合包,例如“xxx-yyyy”、“L-cc-fff-C12Z3N-xxx”,甚至“Name.xxx-12N7t-p6”和很快。因此,解析出可能与 325k 向量中的正则表达式之一匹配的字符串部分并使用 match() 是根本不现实的,因此我希望使用正则表达式。

除了将我的“表”分成 3000 多个子集并使用上述代码之外,最好的方法是什么?

R版本3.2.3(2015-12-10)--“木制圣诞树”
版权所有 (C) 2015 R 统计计算基金会
平台:x86_64-w64-mingw32/x64(64位)
在 R-Studio 版本 0.98.1028 中

感谢您的帮助。

最佳答案

您可以在 apply 循环中一一检查每个正则表达式字符串。这会有点慢,但如果速度不重要,它将提供令人满意的解决方案:

matches = unique(unlist(lapply(mytable, grep, x=mydata$id, value=F))). 

一些可重复的数据来测试:

mydata = data.frame(id = paste0(sample(letters, 30000, T), 
sample(letters, 30000, T),
sample(letters, 30000, T),
sample(letters, 30000, T)))

mytable = paste0(sample(letters, 30000, T),
sample(letters, 30000, T),
sample(letters, 30000, T),
sample(letters, 30000, T))

顺便说一句,datatable 都是 R 中的保留字,因此将它们用作变量名并不是很好的做法。因此,我将它们称为 mytablemydata

关于r - 在 r 中使用 grep 和非常大的正则表达式向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40729044/

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