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.call
和mapply
或者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)))
我有一个有两个参数的函数 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.call
和mapply
或者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)))