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