在
match.arg()
函数中,为什么choices
参数可以是数字,而arg
参数的值不能是数字?这个函数是否不应该用于匹配数字参数?
match.arg
的文档显示如下,但没有提到数字值:
好的,但在下面的示例中没有数字。choices - 一个候选值的字符向量
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年,而我不想要这个。
choices
参数是为了确保arg
是可能的选项之一,并将其分配为这样... 像在if
语句中使用,对吧?我已进行了编辑以提高清晰度。 - Rich Scrivenyear %in% choices
。 - IRTFMis.element(year, choices)
。有没有更喜欢的匹配数字参数的方法?这是大数据,所以我试图尽快得到结果。 - Rich Scriven%in%
的表现非常出色。它实际上只是match
的一个包装器,而match
是用 C 优化过的。我不会期望match.args
在这种情况下有很好的竞争力。 - IRTFM