我尝试做的事情是微不足道的,但我还没有找到明确的解决方案:
例如,我有以下功能:
sample.function <- function(a, b, named="test") {
...
}
我希望我可以检查函数并获取参数(可能作为R列表),给定ret
是所需函数的返回值,以下断言应该是全部True
ret <- magicfunction(sample.function)
ret[[1]] == "a"
ret[[2]] == "b"
ret$named == "test"
可以吗?
答案 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
<强>修强>