Свойства функции 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,

Другие вопросы по тегам