r语言 - match.Arg行为不连贯



我发现这种行为非常令人困惑:

choose_language <- function(language = c("R", "python", "C")) {   
language <- match.arg(language, several.ok = FALSE)   
paste('I love', language)  
}

choose_language(language = "R")

"I love ">

choose_language(language = c("R", "python"))

Error in…好的

choose_language(language = c("R", "python", "C"))

"I love ">

为什么会这样?

我期望与以下函数相同的行为:

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)中,选择是从匹配的函数的形式参数arg的默认设置中获得的。Arg被叫来了。(因为默认的参数匹配会将arg设置为choices,所以这被允许作为' length 1 '的例外,除非是几个。ok是TRUE '规则,并返回第一个元素。)">

如果你更新你的函数,显式地包括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"'

相关内容

  • 没有找到相关文章

最新更新