如何解决为R中的函数参数设置可能的值例如:f <-functionx{},其中x必须为`a`或`b`
在R中,如何定义类似f <- function(x){...}
的函数,该函数只能将参数x
设为'a'
或'b'
?
[顺便说一句,目前(截至2020年)用于在R中创建函数的最佳/简易/实用软件包是什么?还是氧气?]
解决方法
R中允许函数参数包含这么多值之一的一种规范(惯用)方式是使用match.arg
:
f <- function(x = c("a","b")) {
x <- match.arg(x)
}
由于默认设置为several.ok=FALSE
,因此将x
简化为单个参数。如果未提供任何内容,则它将默认为向量中的第一个值。
但是,请注意,由于它在内部使用pmatch
,因此允许部分匹配。这意味着:
match.arg('a',c('aa','bb'))
# [1] "aa"
这可能是不希望的。在这种情况下,RonakShah的第一个建议(也将其修改为检查长度)可能是最直接的,是以下if
语句之一:
f <- function(x) {
if (is.null(x) || length(x) != 1L || !x %in% c("a","b")) {
stop("'x' argument must be one of: 'a','b'")
}
### or,if 'x' can have length>1,then
if (is.null(x) || !length(x) || !all(x %in% c("a","b"))) {
stop("'x' argument must be one of: 'a','b'")
}
# ...
}
如果x
的长度可以合法地大于1,则将条件更新为!all(x %in% c("a","b"))
。
仅供参考:roxygen
不是用于创建函数。我认为它最初的功能是将文档与代码保存在同一位置,这可能会导致开发人员在修改功能本身时促使开发人员更新文档。我相信在实践中,这也许过于乐观,尤其是对于大型函数,其中roxygen文档不在页面上。
但是,另一个好处(在后续版本中)是它支持markdown格式的文档,不再需要用户使用以R为中心的格式(例如,URL,指向其他R函数/包的链接,代码,强调)等)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。