R语言管道链中实现最大日期减N年的单行写法咨询
R原生管道日期运算报错解决方案
你遇到的报错是R原生|>管道的语法限制导致的:该管道不支持直接将二元运算符(如-)、大括号包裹的匿名表达式作为右侧调用对象。
以下是几种无需定义中间变量的单管道链实现方法:
方法1:使用原生管道支持的匿名函数(R 4.1及以上版本适用)
aus_livestock$Month |> max() |> as_date() |> (\(d) d - years(6))()
运行输出:
[1] "2012-12-01"
方法2:将减法运算符转为普通函数调用
直接调用R底层的减法函数,符合原生管道的传参规则:
aus_livestock$Month |> max() |> as_date() |> `-`(years(6))
如果加载了magrittr包,也可以用可读性更强的subtract函数:
aus_livestock$Month |> max() |> as_date() |> subtract(years(6))
方法3:使用magrittr的%>%管道
如果换用tidyverse默认加载的%>%管道,你之前尝试的大括号写法可以直接生效:
aus_livestock$Month %>% max() %>% as_date() %>% {. - years(6)}
内容的提问来源于stack exchange,提问作者Doug Fir
相关产品推荐
相关产品推荐

