2015-07-15 4 views
3

У меня есть вектор шаблонов, и вам нужно использовать agrep. Проблема в том, что agrep, по-видимому, занимает всего один шаблон за раз.R: 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 и т.д. может помочь? Благодаря!!

ответ

5

Использование 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.

+0

Да, спасибо! Я попробовал 'lapply', но использовал неправильный синтаксис - не поставил функцию в нужное место –

+0

Оказалось, оба метода имеют сопоставимую скорость. –

+0

Как вы подходите к нему с dplyr или data.table? –

Смежные вопросы