gpt4 book ai didi

r - 查找没有默认值的函数参数

转载 作者:行者123 更新时间:2023-12-04 19:02:17 25 4
gpt4 key购买 nike

如何从函数外部可靠地判断形式函数参数是否具有默认值?

在下面的示例中,我想确保当参数具有或不具有默认值时,下面的测试不会无法找到:

myfun <- function(a, b=1, ...) {}
formals(myfun)
for (n in names(formals(myfun))) {
if (is.name(formals(myfun)[[n]])) {
cat(n, "has no default value\n")
} else {
cat(n, "has a default value:", formals(myfun)[[n]], "\n")
}
}
is.name是我提出的最好的测试,但我更愿意看到它是一个名称并且它是空的(或者更好的是像 missing 这样的更明确的测试会在函数内部提供)。

最佳答案

您可以进行空字符串比较以测试每个值是否为空:

myfun <- function(a, b=1, ...) {}
formals(myfun)
for (n in names(formals(myfun))) {
if (formals(myfun)[[n]] == "") {
cat(n, "has no default value\n")
} else {
cat(n, "has a default value:", formals(myfun)[[n]], "\n")
}
}

a has no default value
b has a default value: 1
... has no default value



针对罕见但可能的情况进行了更新,希望将 ""视为已定义的空字符串的默认值:
myfun <- function(a, b=1, c="", ...) {}
formals(myfun)
for (n in names(formals(myfun))) {
if (!nzchar(formals(myfun)[[n]]) & is.name(formals(myfun)[[n]])) {
cat(n, "has no default value\n")
} else {
cat(n, "has a default value:", formals(myfun)[[n]], "\n")
}
}

a has no default value
b has a default value: 1
c has a default value:
... has no default value



为了完整性而进行的额外编辑:在结果中实际显示空引号字符并定义 formals(myfun)而不是一遍又一遍地调用它:
myfun <- function(a, b=1, c="", ...) {}
myfun_args <- formals(myfun)
for (n in names(myfun_args)) {
if (!nzchar(myfun_args[[n]]) & is.name(myfun_args[[n]])) {
cat(n, "has no default value\n")
} else {
if (!nzchar(myfun_args[[n]]))
cat(n, "has a default value:", dQuote(myfun_args[[n]]), "\n")
else
cat(n, "has a default value:", myfun_args[[n]], "\n")
}

}

a has no default value
b has a default value: 1
c has a default value: “”
... has no default value

关于r - 查找没有默认值的函数参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34938610/

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