R:在参数列表中应用函数列表

时间:2014-08-19 18:42:37

标签: r

假设我在列表中有多个函数,在另一个列表中有几个参数(它们的排列方式使每个函数都调用正确的参数):

fun_list <- list(f1, f2, f3)
arg_list <- list(a1, a2, a3)

R中是否有一个函数可以分别在arg_list上应用fun_list?更具体地说,我想:

fun_apply(fun_list, arg_list) == list(f1(a1), f2(a2), f3(a3))

2 个答案:

答案 0 :(得分:6)

使用Map。 (Map基本上是mapply,默认值为SIMPLIFY = FALSE。)例如:

fns <- list(mean, median, sum)
values <- list(1:5, 3:7, 5:9)
Map(
  function(fn, value)
  {
    fn(value)
  },
  fns,
  values
)

答案 1 :(得分:1)

如果您只想要列表中的参数和函数的名称,那么就像这样:

f1 <- f2 <- f3 <- function(x) x
a1 <- a2 <- a3 <- "14";

fun_list <- list("f1", "f2", "f3")
arg_list <- list("a1", "a2", "a3")

mapply(function(x, y) eval(parse(text=paste(x, "(", y, ")", sep=""))), fun_list, arg_list)

如果您不想要列表中的名称,而是实际的参数和函数:

fun_list <- list(f1, f2, f3)
arg_list <- list(a1, a2, a3)

mapply(function(x, y) x(y), fun_list, arg_list)