从任何函数中提取函数参数和默认值
Posted
技术标签:
【中文标题】从任何函数中提取函数参数和默认值【英文标题】:Extract function parameters and default values from any function 【发布时间】:2016-07-31 17:03:05 【问题描述】:有没有办法从函数外部提取任何给定函数的参数及其各自的默认值?
例如,给定:
myfunc <- function(a, b = 1) print(c(a, b))
我正在寻找一些会返回的函数:
list(a = NULL, b = 1)
或其一些变体。
【问题讨论】:
你为什么使用NULL
作为参数“a”? function(a, b = 1, c = NULL)
的结果是什么?
【参考方案1】:
您正在寻找formals()
。
formals(myfunc)
# $a
#
#
# $b
# [1] 1
如果你需要 NULL
来代替 a
,你可以做一些检查。 a
将属于“名称”类并且为空。
lapply(formals(myfunc), function(x) if(is.name(x) & !nzchar(x)) NULL else x)
# $a
# NULL
#
# $b
# [1] 1
【讨论】:
可以使用missing(x)
来检测您所说的“空”。返回逻辑。我猜你首先尝试了is.null
并得到了一个错误,但missing
并没有尝试评估它的论点。
@42- - 你是什么意思?如果我这样做lapply(formals(myfunc), function(x) missing(x))
,我都会得到 FALSE。 is.null()
也为两者返回 FALSE,因为 a
实际上不是 null,它是一个名称 ""
myfunc <- function(a,b=1)print(missing(a)); myfunc(); #TRUE
同意它不为 NULL。 missing
在函数内部具有意义,我认为用 lapply
逐一传递形式不会给出相同的信息。如果您将 missing
更改为 is.null
并运行它,您会得到一个错误而不是 TRUE。
OP 正在尝试从函数外部执行此操作。以上是关于从任何函数中提取函数参数和默认值的主要内容,如果未能解决你的问题,请参考以下文章