pmatch
该函数的一个用途是:在设置函数参数时,限制输入的参数范围。
pmatch(x, table, nomatch = NA_integer_, duplicates.ok = FALSE)
# 返回首次匹配元素在table中的位置
- x:标量或向量,必须为
character
类型 - table:向量,必须为
character
类型 - nomatch:未匹配时返回值,必须设定为
int
类型 - duplicates.ok:在匹配过程中,当存在多匹配时,会返回首次匹配的位置,并从记录中删除,再次匹配时将忽略该位置(FALSE);为TRUE时,不忽略该位置,会重复匹配
pmatch("", "") # returns NA
pmatch("m", c("mean", "median", "mode")) # returns NA
pmatch("med", c("mean", "median", "mode")) # returns 2
pmatch(c("", "ab", "ab"), c("cbc", "ab", "abd"), dup = FALSE)
# return NA, 2, 3
pmatch(c("", "ab", "ab"), c("abc", "ab"), dup = TRUE)
# return NA, 2, 2
注意
该函数主要包括:精确匹配和模糊匹配
如果精确匹配时,考虑第一次精确匹配,并且记录第一次精确匹配的位置。
如果没有精确匹配,则考虑模糊匹配,并且记录第一次模糊匹配的位置(以开头匹配的为首要记录的)。
如果x的整个元素与表中元素的开头都匹配(或者都不在开头的模糊匹配),则返回NA。
> pmatch("ab", c("cabc", "dab", "abd"), dup = FALSE)
[1] 3
> pmatch("ab", c("abc", "abd", "abe"), dup = FALSE)
[1] NA
> pmatch("ab", c("dabc", "cabs"), dup = FALSE)
[1] NA
> pmatch("ab", c("ab", "ab", "ab"), dup = FALSE)
[1] 1
此外,空字符串什么也不能匹配,甚至不能与空字符串完全匹配。
如果duplicates.ok为FALSE,则一旦匹配,表的值将从后续匹配的搜索中排除。