【问题标题】: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) 的结果是什么?

标签: r function arguments


【解决方案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 &lt;- function(a,b=1){print(missing(a))}; myfunc(); #TRUE 同意它不为 NULL。 missing 在函数内部具有意义,我认为用 lapply 逐一传递形式不会给出相同的信息。如果您将 missing 更改为 is.null 并运行它,您会得到一个错误而不是 TRUE。
  • OP 正在尝试从函数外部执行此操作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-08
  • 2011-02-20
  • 2011-04-09
  • 2018-06-28
  • 2019-09-11
  • 2012-08-03
相关资源
最近更新 更多