Свойства функции pmatch
Я не понимаю поведение встроенной функции pmatch (частичное совпадение строк).
Описание содержит следующий пример:
pmatch("m", c("mean", "median", "mode")) # returns NA instead of 1,2,3
но с использованием:
pmatch("m", "mean") # returns 1, as I would have expected.
Кто-нибудь может объяснить мне это поведение?
2 ответа
Согласно документации:
nomatch
: значение, которое будет возвращено при несовпадении или умножении частично совпадающих позиций. Обратите внимание, что оно приводится к целому числу.
nomatch
по умолчанию используется значение NA (т. е. если имеется несколько частичных совпадений, то будет возвращено значение NA).
pmatch("me", c("mean", "median", "mode"))
[1] NA # returns NA instead of 1,2 since multiple partial matches
pmatch("mo", c("mean", "median", "mode"))
[1] 3 # since single partial match
использование grep
вместо этого - поведение NA-on-duplicates pmatch
невероятно раздражает:
grep("^m", c("mean", "median", "mode"))
[1] 1 2 3
> grep("ed", c("mean", "median", "mode"))
[1] 2
Единственным недостатком является то, что pmatch(x, table...
векторизовано для обоих аргументов, но grep
только для второго аргумента Так grep
не может взять вектор шаблонов. Но вы можете использовать stringi
или sapply
,