English · PDF 291
这是我最喜欢的形式,因为它关注的是动词,而不是名词。你可以像阅读一系列祈使动作一样阅读这些函数组合。Foo Foo 跳一跳,然后挖一挖,再敲一敲。当然,缺点是你需要熟悉管道操作符。如果你以前从未见过 %>%,你就完全不知道这段代码在做什么。幸运的是,大多数人都能很快掌握这个概念,所以当你与不熟悉管道的人分享代码时,可以很容易地教会他们。
管道的工作原理是执行一种“词法转换”:在幕后,magrittr 会将管道中的代码重新组装成一种通过覆盖中间对象来工作的形式。当你运行前面那样的管道时,magrittr 实际上做了类似这样的事情:
my_pipe <- function(.) { . <- hop(., through = forest) . <- scoop(., up = field_mice) bop(., on = head) } my_pipe(foo_foo)
这意味着管道不适用于两类函数:
assign("x", 10) x #> [1] 10 "x" %>% assign(100) x #> [1] 10
在管道中使用 assign 不起作用,因为它会将其赋值到 %>% 所使用的一个临时环境中。如果你确实想在管道中使用 assign,必须显式指定环境:
env <- environment() "x" %>% assign(100, envir = env) x #> [1] 100
存在同样问题的其他函数还包括 get() 和 load()。