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

比尔·丹尼

我怎样才能可靠地判断形式函数参数是否具有函数外部的默认值?

在下面的示例中,我想确保在参数具有或没有默认值时,以下测试不会失败:

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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

R 函数 - 缺少错误参数,没有默认值

来自分类Dev

函数内部的lapply,glm和speedglm:缺少参数“数据”,没有默认值

来自分类Dev

倍频程错误:调用函数时参数1没有默认值

来自分类Dev

没有默认值的函数参数,是否需要检查是否已定义?

来自分类Dev

为什么out参数没有默认值?

来自分类Dev

Julia中没有自然默认值的命名参数

来自分类Dev

接口中的可选参数,没有任何默认值

来自分类Dev

参数@ code1没有默认值

来自分类Dev

错误:缺少参数“ x”,没有默认值?

来自分类Dev

缺少参数“变量”,没有默认值

来自分类Dev

具有参数默认值的构造函数

来自分类Dev

获取具有默认值的函数参数

来自分类Dev

有什么办法可以区分Oracle中的“参数没有默认值”和“参数的默认值为null”

来自分类Dev

函数参数Python的多个默认值

来自分类Dev

修改函数参数的默认值

来自分类Dev

用于函数的可选参数的默认值

来自分类Dev

如何访问函数参数的默认值?

来自分类Dev

函数作为参数的默认值

来自分类Dev

从修改默认值的函数调用具有不同默认参数的多个函数

来自分类Dev

用作具有默认值的参数

来自分类Dev

Pythonic 检查参数的方法是整数,如果没有参数则设置默认值

来自分类Dev

字段“区”没有默认值

来自分类Dev

字段没有默认值

来自分类Dev

字段没有默认值

来自分类Dev

没有默认值错误!Laravel

来自分类Dev

具有默认值的Scala函数参数,后跟多参数

来自分类Dev

没有提供值时命令行参数的默认值

来自分类Dev

没有定义可用值的参数的SSRS刷新默认值

来自分类Dev

在另一个带有点参数和默认值的函数中调用带有点参数和默认值的函数

Related 相关文章

热门标签

归档