取消列出R中的功能列表

时间:2018-03-28 07:14:06

标签: r

我有一个列表,其中至少有一个元素是一个函数:我想取消它。所有函数都以某种方式相关,并希望获得一个函数,该函数接受所有使用的参数并输出指定的结果:

f=c(a=function(x,y)x+y+2*x^2,b=function(m)m*exp(m),d=function(x,m)x^2+2*x*m)
f
$a
function (x, y) 
x + y + 2*x^2

$b
function (m) 
m * exp(m)

$d
function (x, m) 
x^2 + 2 * x * m

预期产出:

g = function(x) c(x[1] + x[2] + 2*x[1]^2, x[3] * exp(x[3]), x[1]^2+2*x[1]*x[3])

可以是任何不一定x的函数。如果可能,最好使用Base R解决方案:(也将使用其他包)

我的试用版:

`unlist(f)` :this fails
f=sub(",.*","",deparse(f)[-1]);f[length(f)]=sub(")$","",f[length(f)])
 f
[1] "x + y"           "m * exp(m)"      "x^2 + 2 * x * m"

谢谢

1 个答案:

答案 0 :(得分:1)

您的问题描述不是很好,但您可以这样做:

f=c(a=function(x,y)x+y+2*x^2,b=function(m)m*exp(m),d=function(x,m)x^2+2*x*m)
x <- setNames(1:3, c("x", "y", "m"))

foo <- function(x, f) {
  #add ... to avoid unused arguments error
  f <- lapply(f, function(fun) {
    if ("..." %in% names(formals(fun))) return(fun)
      else formals(fun) <- c(formals(fun), alist(... =))
    fun
  })
  x <- as.list(x)
  #call the functions
  vapply(f, function(fun) do.call(fun, x), FUN.VALUE =  numeric(1))
}

foo(x, f)
#      a        b        d 
#5.00000 60.25661  7.00000