R: 将 (m?)apply 与 returns 列表作为要应用的函数的参数的函数一起使用?

R: Use (m?)apply with a function that returns a list as the argument to the function to be applied over?

我有一个有两个参数的函数 foo(a,b)。作为此函数的输入,我将使用 gtools 库中 combinations(10,2) 输出的每一行。我试图让它与 mapply 一起工作,我真的对 apply(combinations(10,2),1,foo) 寄予厚望,但我尝试的一切都抛出了错误 "argument "b" is missing,没有默认”。如何在不将 combinations(10,2) 存储在内存中并将其分开的情况下更正此问题?我怀疑我错过了 Vectorize.

的技巧

对于一个简单的可重现示例,使用 beta(a,b) 代替 foo(a,b)

我非常明确地想做的是:

a<-combinations(10,2)
mapply(foo,a[,1],a[,2])

因为我不想在内存中存储组合(10,2)。

这里我们可以使用do.callmapply或者Map

do.call(mapply, c(FUN = foo, asplit(combinations(10, 2), 2)))

或者用 Map (returns a list)

do.call(Map, c(f = foo, asplit(combinations(10, 2), 2)))

作为可重现的例子,可以使用beta

do.call(Map, c(f = beta, asplit(combinations(10, 2), 2)))