我自己刚开始接触管道的时候, 有过什么都想上管道的倾向 ... 现在处于一种混杂的状态. 至于什么时候用什么时候不用, 我的标准是认知上的流畅和简洁. 但这个 "简洁" 并不是完全说输入的代码越少越好. 我下面举一些例子:
my_data[, c("var_1", "var_2", "var_3")] %>% my_fun()
上面这个例子我觉得就是一个简单的, 但是显示管道优点的例子. 因为它的形式是贴合你的思维过程的. 如果你用传统的方式来写, 就会有点拗口:
my_fun(my_data[, c("var_1", "var_2", "var_3")])
因为 my_fun()
这个操作是后发生的.
如果用中间的变量, 我个人会觉得有点笨拙:
new_data <- my_data[, c("var_1", "var_2", "var_3")]
my_fun(new_data)
这么写对我个人来说还有三个不爽的点:
new_data
这个变量是不重复使用的, 有点废话.
new_data
会阻断思维过程, 本来一句话能说清楚的, 变得冗长了. 我下次看的时候, 加工时间会更长.
- 如果你采用中间变量是为了更清晰, 更显性, 那么这背后需要你花心思去取直观简洁的变量名, 这个过程对我来说很痛苦.
但就算我支持管道, 我也不会刻意这样写:
c("var_1", "var_2", "var_3") %>%
{my_data[, .]} %>%
my_fun()
因为我思考的时候, my_data[, c("var_1", "var_2", "var_3")]
是整体出现的. 字面上的, 刻意的简洁反而是损害思维上的简洁的. 除非 c("var_1", "var_2", "var_3")]
是我之前处理的结果.
这些例子看起来很无足轻重, 但是是我实际开发时的体验的缩影.