pmatch 函数的属性

Properties of pmatch function

我不明白内置函数 pmatch(部分字符串匹配)的行为。

描述提供了以下示例:

pmatch("m",   c("mean", "median", "mode")) # returns NA instead of 1,2,3

但使用:

pmatch("m", "mean") # returns 1, as I would have expected. 

有人可以向我解释一下这种行为吗?

根据文档:

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 - pmatch 的 NA-on-duplicates 行为非常烦人:

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.