至少目前,这对我来说是一个学习练习,所以实际功能或其复杂性不是问题。假设我编写一个函数,其参数列表包含一些输入变量和函数名称,以字符串形式传递。然后,该函数在内部计算一些变量,并“决定”如何将它们提供给我传入的函数名称。
对于非原始函数,我可以这样做(对于这个例子,假设我的funcname
函数有除 atmost 之外的任何参数(x,y,z)
。如果他们这样做了,我就必须编写一些代码来搜索匹配names(formals(get(funcname)))
以免删除其他参数):
foo <- function (a,b,funcname) {
x <- 2*a
y <- a+3*b
z <- -b
formals(get(funcname)) <- list(x=x, y=y, z=z)
bar <- get(funcname)()
return(bar)
}
好处是,即使函数funcname
即使不使用也会无错误地执行x
, y
or z
(只要没有其他参数没有默认值)。
“原始”函数的问题是我不知道有什么方法可以找到或修改它们的形式。除了编写包装器之外,例如foosin <-function(x) sin(x)
,有没有办法设置我的foo
函数可以使用原始函数名称和非原始函数名称作为输入参数吗?
formals(args(FUN))
可用于获取原始函数的形式。
你可以添加一个if
对现有函数的声明。
> formals(sum)
# NULL
> foo2 <- function(x) {
if(is.primitive(x)) formals(args(x)) else formals(x)
## formals(if(is.primitive(x)) args(x) else x) is another option
}
> foo2(sum)
# $...
#
#
# $na.rm
# [1] FALSE
#
> foo2(with)
# $data
#
#
# $expr
#
#
# $...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)