我无法弄清楚如何使用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个统一的随机抽取。
答案 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