链算术运算符与R|>管道

5f0d552i  于 2023-04-03  发布在  其他
关注(0)|答案(2)|浏览(165)

这个问题基本上与Chain arithmetic operators in dplyr with %>% pipe相同,但针对新的管道操作符|>(如R 4.1)进行了更新。

**如何使用R原生管道|>链接算术运算符?**使用dplyr/magrittr,您可以为算术运算符使用反引号,但这不适用于内置的R管道运算符。下面是一个简单的示例:

R.version$version.string
# [1] "R version 4.2.2 (2022-10-31 ucrt)"

x <- 2
# With dplyr/magrittr, you can use backticks for arithmetic operators
x %>% `+`(2)
# [1] 4

# But that doesn't work with the inbuilt R pipe operator
x |> `+`(2)
#  Error: function '+' not supported in RHS call of a pipe

希望答案足够通用,可以用于任何操作符或内置函数,这些操作符或内置函数通常不能很好地与原生R管道一起工作(我的版本是R 4.2.2)。
答案https://stackoverflow.com/a/72086492/2449926有很多关于%>%|>之间差异的有用信息,但没有一个能完全回答我的问题。

8zzbczxx

8zzbczxx1#

我们可以使用名称空间前缀。

2 |> base::`+`(2)
# 4
izkcnapc

izkcnapc2#

一个解决方案(虽然可能不是直接的答案)是为所需的操作符使用匿名函数:

((x + 2) * 3) / 4
#[1] 3

# Chained with anonymous functions
x |> 
  {\(x, y) x + y}(2) |> 
  {\(x, y) x * y}(3) |> 
  {\(x, y) x / y}(4)
# [1] 3

虽然没有magrittr的烟斗那么优雅

x %>%
  `+`(2) %>%
  `*`(3) %>%
  `/`(4)
# [1] 3

该变通方法至少允许链接。

相关问题