你可以做一个空字符串比较,以测试如果每个值为空:
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")
}
}
一个没有缺省值
B有一个默认值:1
......没有默认价值
更新的希望治疗“” AS空字符串定义的默认罕见但可能的案例:
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")
}
}
一个没有默认值
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")
}
}
一个没有默认值
B有一个默认值:1个
C有一个默认值:“”
......没有默认值
@jenesaisquoi - 这绝对清洁为基础案例。正如@RichardScriven之前指出的那样,它并没有把''“'作为空字符的默认值处理。 –
“相同”可能会更好。因为OP在这种情况下在更大规模上使用这种情况下的速度优势,所以我使用'nzchar'。 –
@jenesaisquoi:同意。这里'=='不是很好。 –