English · PDF 313
# 到 # 表达 }
这往往使代码更容易理解,因为你不需要那么多上下文就能理解它。
如果你想编写自己的可管道化函数,考虑返回值非常重要。可管道化函数主要有两种类型:转换和副作用。
在转换函数中,有一个明确的“主要”对象作为第一个参数传入,函数返回其修改后的版本。例如,dplyr 和 tidyr 的关键对象是数据框。如果你能确定你的领域中的对象类型,你会发现你的函数可以自然地与管道配合使用。
副作用函数主要是为了执行某个操作而被调用,比如绘制图形或保存文件,而不是转换对象。这些函数应该“不可见地”返回第一个参数,这样它们默认不会被打印出来,但仍可以在管道中使用。例如,下面这个简单的函数会打印出数据框中缺失值的数量:
show_missings <- function(df) { n <- sum(is.na(df)) cat("Missing values: ", n, "\n", sep = "") invisible(df) }
如果我们以交互方式调用它,invisible() 意味着输入的 df 不会被打印出来:
show_missings(mtcars) #> Missing values: 0
但它仍然在那里,只是默认不打印出来:
x <- show_missings(mtcars) #> Missing values: 0 class(x) #> [1] "data.frame" dim(x) #> [1] 32 11