在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,这是我不想要的。
答案 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"
不同。