假设我在列表中有多个函数,在另一个列表中有几个参数(它们的排列方式使每个函数都调用正确的参数):
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))
答案 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)