与match.arg()匹配的数字参数

时间:2014-07-23 21:18:10

标签: r

match.arg()中,为什么choices参数可以是数字但arg参数值不能?该函数不应该用于匹配数字参数吗?

match.arg的文档文件显示以下内容,但未提及数值

  

选择候选值的字符向量

好的,但它不在以下示例中。

f <- function(year){
    match.arg(year, choices = 1995:2005)
}

f(2000)
# Error in match.arg(year, 1995:2005) : 
#  'arg' must be NULL or a character vector

g <- function(year){
   match.arg(as.character(year), choices = 1995:2005)
}

g(2000)
# [1] 2000

所以一个字符串恰好匹配一个数值...有趣。

我使用此函数的目的是确定用户输入的year是否是多年的大向量的成员,这不一定是序列(有些是缺失的)。

另请注意,year = NULL在这里对我不起作用,因为这意味着在我的实际数据中默认年份为1871,这是我不想要的。

1 个答案:

答案 0 :(得分:4)

来自match.arg

的代码段
else if (!is.character(arg)) 
        stop("'arg' must be NULL or a character vector")

没有尝试强制转换为字符串。

来自?match.arg

  

使用pmatch进行匹配,因此arg可以缩写。

来自?pmatch参数部分

  

<强> X
  要匹配的值:通过as.character转换为字符向量。支持长向量。

因此,对于match.arg,用户无法使用数字arg,但可以使用数字choices向量。根据我的经验,5"5"不同。