【发布时间】:2017-03-10 20:19:46
【问题描述】:
我遇到了一个有趣的问题。我有一个三个变量的函数,假设(为了简单和透明)它是这样的:
my_fun <- function(a, b, c) paste(a, b, c, sep = '-')
我想为a 和b 的几种组合创建多个函数,只有参数c。我正在使用函数map2 和partial(都来自包purrr)。
require(purrr)
funs <- map2(letters[1:5], LETTERS[1:5], partial, ...f = my_fun)
我希望函数列表中的每个函数产生不同的输出,但事实并非如此。
funs[[1]]('hi') # [1] "e-E-hi"
funs[[3]]('hi') # [1] "e-E-hi"
funs[[5]]('hi') # [1] "e-E-hi"
我能够为我的问题创建不同的解决方案,所以我的问题不是“如何去做”。我对它为什么这样做很感兴趣。
另一个使用基数mapply的例子:
mapply(partial, letters[1:5], LETTERS[1:5], MoreArgs = list(...f = my_fun))[[1]]('hi')
# [1] "e-E-hi"
【问题讨论】:
-
它是一个懒惰的评估事情......添加
.lazy=FALSE解决了它,但为什么我不清楚。