给定R env中定义的函数,获取函数参数

时间:2014-09-03 09:51:41

标签: r reflection

我尝试做的事情是微不足道的,但我还没有找到明确的解决方案:

例如,我有以下功能:

sample.function <- function(a, b, named="test") {
...
}

我希望我可以检查函数并获取参数(可能作为R列表),给定ret是所需函数的返回值,以下断言应该是全部True

ret <- magicfunction(sample.function)
ret[[1]] == "a"
ret[[2]] == "b"
ret$named == "test"

可以吗?

2 个答案:

答案 0 :(得分:2)

以下是您可以在函数内部或外部查看的一些内容。

> f <- function(FUN = sum, na.rm = FALSE) { 
      c(formals(f), args(f), match.fun(FUN))
  }
> f()
$FUN
sum

$na.rm
[1] FALSE

[[3]]
function (FUN = sum, na.rm = FALSE) 
NULL

[[4]]
function (..., na.rm = FALSE)  .Primitive("sum")

答案 1 :(得分:1)

如果函数用括号括起来(几乎所有函数都有),这将有效。它给出一个列表,其名称是参数名称,其值是默认值:

sample.function <- function(a, b, named="test") {} # test function

L <- as.list(formals(sample.function))); L
## $a
## 
## $b
## 
## $named
## [1] "test"

这稍微长一些,但即使对于其主体未被括号括号包围的函数也可以使用:

head(as.list(args(sample.function)), -1)
# same output

head(as.list(args(sin)), -1) # sin has no {}
## $x

回到第一个例子,检查缺失的默认值:

sapply(L, identical, formals(function(x) {})$x)
##    a     b named 
## TRUE  TRUE FALSE 

<强>修