R:带有矢量模式的 agrep
R: agrep with vector pattern
我有一个模式向量,需要对它们使用 agrep
。问题是 agrep
似乎一次只采用一种模式。
patt <- c("test","10 Barrel")
lut <- c("1 Barrel","10 Barrel Brewing","Harpoon 100 Barrel Series","resr","rest","tesr")
for (i in 1:length(patt)) {
print(agrep(patt[i],lut,max=1,v=T))
}
结果:
[1] "rest" "tesr"
[1] "1 Barrel" "10 Barrel Brewing" "Harpoon 100 Barrel Series"
for
在长模式上很慢,因此尝试以矢量化形式进行:
VecMatch1 = function(string, stringVector){
stringVector[agrep(string, stringVector, max = 1)]
}
a = VecMatch1(patt,lut)
Warning message:
In agrep(string, stringVector, max = 1) :
argument 'pattern' has length > 1 and only the first element will be used
可能 lapply
等函数可以提供帮助?谢谢!!
使用lapply
:
lapply(patt, agrep, x=lut, max.distance=c(cost=1, all=1), value=TRUE)
[[1]]
[1] "rest" "tesr"
[[2]]
[1] "1 Barrel" "10 Barrel Brewing" "Harpoon 100 Barrel Series"
您可能可以使用 dplyr 或 data.table 获得更快的性能。
我有一个模式向量,需要对它们使用 agrep
。问题是 agrep
似乎一次只采用一种模式。
patt <- c("test","10 Barrel")
lut <- c("1 Barrel","10 Barrel Brewing","Harpoon 100 Barrel Series","resr","rest","tesr")
for (i in 1:length(patt)) {
print(agrep(patt[i],lut,max=1,v=T))
}
结果:
[1] "rest" "tesr"
[1] "1 Barrel" "10 Barrel Brewing" "Harpoon 100 Barrel Series"
for
在长模式上很慢,因此尝试以矢量化形式进行:
VecMatch1 = function(string, stringVector){
stringVector[agrep(string, stringVector, max = 1)]
}
a = VecMatch1(patt,lut)
Warning message:
In agrep(string, stringVector, max = 1) :
argument 'pattern' has length > 1 and only the first element will be used
可能 lapply
等函数可以提供帮助?谢谢!!
使用lapply
:
lapply(patt, agrep, x=lut, max.distance=c(cost=1, all=1), value=TRUE)
[[1]]
[1] "rest" "tesr"
[[2]]
[1] "1 Barrel" "10 Barrel Brewing" "Harpoon 100 Barrel Series"
您可能可以使用 dplyr 或 data.table 获得更快的性能。