gpt4 book ai didi

函数默认参数和命名值

转载 作者:行者123 更新时间:2023-12-01 18:15:41 25 4
gpt4 key购买 nike

假设我有一个 R 函数,其中参数可以是几个预定义命名值之一(其中一个是默认值)或自定义字符向量。我应该如何在不依赖魔术值名称或其他标志的情况下实现这一点?

#allow use of predefined subsets or pass their own list
bratPack<-function(members='CORE',...){
if (members=='CORE')
members<-c('Emilio Estevez','Anthony Michael Hall','Rob Lowe','Andrew McCarthy','Demi Moore','Judd Nelson','Molly Ringwald','Ally Sheedy')
else if (members=='ALL')
members<-c('Emilio Estevez','Anthony Michael Hall','Rob Lowe','Andrew McCarthy','Demi Moore','Judd Nelson','Molly Ringwald','Ally Sheedy','James Spader','Robert Downey, Jr.','Jon Cryer', 'John Cusack', 'Kevin Bacon', 'Jami Gertz', 'Mary Stuart Masterson', 'Matthew Broderick', 'Sean Penn', 'Kiefer Sutherland')
...
}

最佳答案

从您的示例中,我们可以选择“CORE”“ALL”。如果这是两个选项,那么我们在参数 'members' 的函数定义中指定它们。例如:

foo <- function(x, members = c("CORE", "ALL")) {
## do something
}

该函数定义设置参数'members'允许的值,默认值为“CORE”,因为这是第一个命名选项。

在函数体内使用的代码是 match.arg(),正如 @Joris 已经提到的,但是因为我们已经按照上面的方式设置了函数,所以我们可以简单地使用只是 match.arg(members)

所以我们可以将 foo 写为:

foo <- function(x, members = c("CORE", "ALL")) {
## evaluate choices
members <- match.arg(members)
## do something
print(members)
}

我们这样使用:

> foo()
[1] "CORE"
> foo(members = "CORE")
[1] "CORE"
> foo(members = "ALL")
[1] "ALL"
> foo(members = "3rdRate")
Error in match.arg(members) : 'arg' should be one of “CORE”, “ALL”

请注意当我们提供未包含在选项集中的字符串时的行为。我们得到了直观的错误消息,这都是因为我们在函数参数中设置了选项。

关于函数默认参数和命名值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4683405/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com