purrr中的部分难题

问题描述 投票:4回答:1

嗨我经常发现自己在.fists = FALSE中使用purrr:partial参数。所以今天我决定不再重复自己了,我试着写一部分partial本身:

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确保我们不会覆盖预先填充的参数。

r functional-programming purrr
1个回答
1
投票

这是一种方式:

# 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
© www.soinside.com 2019 - 2024. All rights reserved.