[英]match.arg behaviour not coherent
我发现这种行为非常令人困惑:
choose_language <- function(language = c("R", "python", "C")) {
language <- match.arg(language, several.ok = FALSE)
paste('I love', language)
}
choose_language(language = "R")
“我的爱人”
choose_language(language = c("R", "python"))
错误...好的
choose_language(language = c("R", "python", "C"))
“我的爱人”
为什么会这样?
我希望与以下函数具有相同的行为:
choose_language <- function(language = "R") {
checkmate::assertChoice(language, choices = c("R", "python", "C"))
paste('I love', language)
}
但没有checkmate
依赖
再次感谢
您在choose_language()
函数中使用match.arg()
是正确的,但它是match.arg()
的单参数形式。 专门为此检查文档:
“在单参数形式 match.arg(arg) 中,选择是从调用 match.arg 的函数的形式参数 arg 的默认设置中获得的。(由于默认参数匹配会将 arg 设置为选择,因此允许作为“长度为一个,除非几个.ok 为真”规则的例外,并返回第一个元素。)”
如果您更新函数以显式包含choices
参数,如下所示
choose_language <- function(language = c("R", "python", "C")) {
language <- match.arg(arg=language, choices = language, several.ok = FALSE)
paste('I love', language)
}
那么你会发现上面所有的例子都返回"I love R"
`
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.