我怎样才能可靠地判断形式函数参数是否具有函数外部的默认值?
在下面的示例中,我想确保在参数具有或没有默认值时,以下测试不会失败:
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没有默认值
b具有默认值:1
...没有默认值
已针对因空缺而定义的默认情况下希望处理“”的罕见情况进行了更新:
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没有默认值
b具有默认值:1
c具有默认值:
...没有默认值
为完全保留而进行的额外编辑:要在结果中实际显示空引号并定义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没有默认值
b具有默认值:1
c具有默认值:“”
...没有默认值
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句