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

How can I chain arithmetic operators with the R native pipe 100?使用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有很多关于%>%|>之间区别的有用信息,但没有一个能很好地回答我的问题.

推荐答案

还有两种可能性,这在https://stackoverflow.com/a/72086492/12505251中已经提到了:

  1. 使用方括号:
2 |> (`+`)(3)
#> [1] 5
  1. 使用占位符_和二元运算符的命名参数:
2 |> `+`(lhs = _, 3)
#> [1] 5

Note:+%*%的情况下,参数的确切名称似乎并不重要.我想这可以推广到所有二元运算符(使用R version 4.2.1).

2 |> `+`(foo = _, 3)
#> [1] 5
2 |> `+`(bar = _, 3)
#> [1] 5
2 |> `+`(lhs = _, 3)
#> [1] 5
2 |> `+`(rhs = _, 3)
#> [1] 5

c(1, 3) %*% t(c(1, 4))
c(1, 3) |> `%*%`(foo = _, t(c(1, 4)))
c(1, 3) |> `%*%`(bar = _, t(c(1, 4)))
c(1, 3) |> (`%*%`)(t(c(1, 4)))
# they all return
#>      [,1] [,2]
#> [1,]    1    4
#> [2,]    3   12

当然,这两种变体并不完全相同:

c(1, 3) |> `%*%`(foo = _, t(c(1, 4)))
#>      [,1] [,2]
#> [1,]    1    4
#> [2,]    3   12

c(1, 3) |> `%*%`(t(c(1, 4)), foo = _)
#>      [,1]
#> [1,]   13

R相关问答推荐

在ggplot的注释表格中突出显示最大值

使用R中的gt对R中的html rmarkdown文件进行条件格式设置表的单元格

具有多个依赖变量/LHS的逻辑模型

更新合适的R mgcv::bam模型报告无效类型(关闭).'';错误

使用tidyverse方法绑定行并从一组管道列表执行左连接

如何计算R数据集中每个女性的子元素数量?

如何在区分不同条件的同时可视化跨时间的连续变量?

如何直接从R中的风险分数计算c指数?

使用R闪光显示所有数据点作为默认设置

在不丢失空值的情况下取消列出嵌套列表

ComplexHEAT:使用COLUMN_SPLIT时忽略COLUMN_ORDER

如何指定我的函数应该查找哪个引用表?

条形图顶部与其错误条形图不对齐

具有重复元素的维恩图

从非重叠(非滚动)周期中的最新数据向后开窗并在周期内计数

悬崖三角洲超大型群数计算导致整数溢出

将标识符赋给事件序列,避免错误观察

使用gt_summary是否有一种方法来限制每个变量集进行配对比较?

对R中的列表列执行ROW Mean操作

生存时间序列的逻辑检验