R语言中是否存在等价于括号包裹赋值操作的函数?
R管道中实现赋值后自动打印的方法
R中括号包裹赋值语句自动打印结果的逻辑很简单:<- 赋值默认是隐形返回被赋值对象,控制台不会主动输出隐形返回的内容;外层套圆括号后,会强制把内部表达式的返回值转为显性返回,控制台就会自动打印结果。
在dplyr的%>%管道里实现同样效果,不需要找专门的内置函数,两种写法就能搞定:
- 最省事的通用写法:直接把整段赋值语句用圆括号包起来就行,和裸赋值时的括号用法完全一致,兼容所有版本dplyr,也兼容R 4.1之后自带的原生管道
|>,示例:
library(dplyr) # 整段赋值套括号,赋值完成自动打印 (y <- 1:4 %>% sqrt() %>% round(2)) # [1] 1.00 1.41 1.73 2.00
运行后变量y会被正确赋值,控制台直接输出赋值后的结果,和(y <- 1:4)的效果完全一样。
- 管道内联写法:如果不想在最外层套括号,要把赋值打印逻辑嵌在管道末尾,自己写一行的小函数就行,不用额外装包:
# 定义管道用的赋值打印函数 pipe_assign <- function(x, var_name) { assign(var_name, x, envir = parent.frame()) x } # 管道末尾直接调用 1:4 %>% sqrt() %>% round(2) %>% pipe_assign("y") # [1] 1.00 1.41 1.73 2.00
运行后同样会完成y的赋值,同时自动打印结果。
注意:magrittr提供的T形管道%T>%不适合这个场景,它的作用是执行右侧带副作用的操作(比如绘图、写文件)后返回原输入值,没法直接实现赋值+打印的组合需求。
内容的提问来源于stack exchange,提问作者Julien
相关产品推荐
相关产品推荐

