purrr中的部分难题

嗨我经常发现自己在purrr:partial中使用.fists = FALSE参数.

所以今天我决定不再重复自己了,我试图写出局部的部分内容:

backwards_partial <- partial(partial,.first = FALSE)

这个函数让我很紧张,因为关于如何使用.first = FALSE是模棱两可的:

>作为输出功能的默认参数
>作为调用partial的参数,将pre-filled参数移到outputed函数的后面

我认为我可以通过写这个来弥补这种模糊性:

backwards_partial <- lift_ld(lift_dl(partial),list(.first = FALSE))

但这失败了,看起来并不优雅.

所以我的问题是……
我在这里缺少一种正确的方法(最佳实践,社区标准)吗?
如果是这样的话是什么?
否则你怎么解决这个问题?

编辑:

我应该提一下我的用例是否有backwards_partial.
我希望预先填充我将传递给compose的多个函数的参数,这将把过去函数的结果传递给第一个参数,因此.fists = FALSE确保我们不会覆盖预先填充的参数.

最佳答案 这是一种方式:

# copy function
backwards_partial <- purrr::partial
# change formals
formals(backwards_partial)[5] <- alist(.first = FALSE)

我们来测试一下:

partial(head,2)(1:5)
# Error in head.default(2, ...) : length(n) == 1L is not TRUE

partial(head,2,.first = FALSE)(1:5)
# [1] 1 2

backwards_partial(head,2)(1:5)
# [1] 1 2
点赞