繁体   English   中英

match.arg 行为不一致

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM