- 已编辑
x <- c(1:10, NA)
a_fun <- function(x) {
. <- x
. <- ifelse(is.na(.), 0, .)
. <- (. + 1) * 3
. <- sort(.)
head(., 5)
}
b_fun <- function(x) {
x |>
{\(.) ifelse(is.na(.), 0, .)}() |>
{\(.) (. + 1) * 3}() |>
sort() |>
head(5)
}
a_fun(x)
#> [1] 3 6 9 12 15
b_fun(x)
#> [1] 3 6 9 12 15
dput(a_fun)
#> function (x)
#> {
#> . <- x
#> . <- ifelse(is.na(.), 0, .)
#> . <- (. + 1) * 3
#> . <- sort(.)
#> head(., 5)
#> }
dput(b_fun)
#> function (x)
#> {
#> head(sort({
#> function(.) (. + 1) * 3
#> }({
#> function(.) ifelse(is.na(.), 0, .)
#> }(x))), 5)
#> }
<sup>Created on 2021-05-24 by the reprex package (v2.0.0)</sup>
想了好久,感觉我还是更喜欢传统的写法。也可以在Rstudio设置 ". <- " 快捷键。写出来的代码也可以很简练。如函数a_fun。这本身就符合奥卡姆剃刀原则。这是其一。
其二, 使用管道符号以后,写出来函数的格式不稳定。比如,dput(b_fun) 以后和原来的代码完全不一样。虽然这对大部分用户来说并不是什么问题,但我本人不太喜欢。
个人观点。