使用do.call调用函数列表

时间:2011-10-14 20:44:53

标签: r

我无法弄清楚如何使用do.call来调用和运行函数列表。

例如:

make.draw = function(i){i;function()runif(i)}
function.list = list()
for (i in 1:3) function.list[[i]] = make.draw(i)

将导致

> function.list[[1]]()
 [1] 0.2996515
> function.list[[2]]()
 [1] 0.7276203 0.4704813
> function.list[[3]]()
 [1] 0.9092999 0.7307774 0.4647443

我想要做的是创建一个函数,一次调用列表中的所有三个函数。根据我的理解as.call()可以用来做到这一点但我无法连接点并从function.list获得6个统一的随机抽取。

2 个答案:

答案 0 :(得分:11)

你想要这样的东西吗?

lapply(function.list, do.call, list())
# [[1]]
# [1] 0.5777857

# [[2]]
# [1] 0.8970102 0.5892031

# [[3]]
# [1] 0.4712016 0.2624851 0.2353192

答案 1 :(得分:4)

 make.draw = function(i){runif(i)}
 Map(make.draw, 1:3)
#[[1]]
#[1] 0.03442084

#[[2]]
#[1] 0.6899443 0.8896434

#[[3]]
#[1] 0.3899678 0.2845898 0.4920698