r - 第二个参数中的链函数

标签 r functional-programming

是否有一种简单的方法来链接函数,即部分应用函数,以便保留一个参数,然后在调用之前将其应用于另一个函数的一个参数(而不是第一个参数)。 (在我的示例中:在给定函数 onetwo 的情况下,是否有更简单的方法来定义函数 two)

我尝试使用 magrittr 和 purrr 寻找解决方案,但没有想出比如下所示定义它更简单的方法。

one <- function(x,y){
  paste(x,y)
}

two <- function(x, y){
  x * y
}

three <- function(x,y){
  one(x, two(y, 3))
}

three(1,2)

# [1] "1 6"

最佳答案

新的pipe operator R 4.1 中引入的 和 R 4.2 中引入的新占位符就是针对此类问题的。

one <- function(x,y){
  paste(x,y)
}

two <- function(x, y){
  x * y
}

three <- function(x,y){
  y |>
    two(3) |>
    one(x, y = _)
}

three(1,2)
#> [1] "1 6"

创建于 2022 年 9 月 28 日 reprex v2.0.2


编辑

按照下面的注释,可以绕过:

two(2, 3) |> one(1, y = _)
#> [1] "1 6"

2 |> two(3) |> one(1, y = _)
#> [1] "1 6"

创建于 2022 年 9 月 28 日 reprex v2.0.2

要看到这一点,请记住管道运算符将下面的第一个形式转换为下一个形式。

h(g(f(x)))
f(x) |> g() |> h()
x |> f() |> g() |> h()

或者,使用问题中的函数,

one(x, two(y, 3))
two(y, 3) |> one(x, y = _)
2 |> two(3, y = _) |> one(x, y = _)

一个R-Help thread starting herelink 结尾R 核心团队成员 Luke Tierney 教授的精彩解释是 this YouTube video .

关于r - 第二个参数中的链函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73877826/

相关文章:

r - 在列中循环 - 仅使用条件一次

multithreading - 生产者-消费者使用赋值

functional-programming - 修改函数以忽略参数的函数的标准名称

r - 垂直条形图中的类别顺序(在 Plotly 中)

r - which.min 在向量的一个子集上

haskell - Haskell中的实际类型与预期类型错误

ios - RxSwift 过滤器变量数组

python - 如何在Python中链接文件对象?

r - {Methcomp} – 戴明/正交回归 – 拟合优度 + 置信区间

r - 在 R 中绘制重叠位置