如何在R中重用长链管道运算符的一部分?
我有一组管道操作符 ( %>%)链,用不同的数据集做不同的事情。
例如:
dataset %>%
mutate(...) %>%
filter(...) %>%
rowwise() %>%
summarise() %>%
etc...
如果我想重用这些链的某些部分,有没有办法做到这一点,而不仅仅是将它包装成一个函数?例如(显然是伪代码):
subchain <- filter(...) %>%
rowwise() %>%
summarise()
# and then instead of the chain above it would be:
dataset %>%
mutate(...) %>%
subchain() %>%
etc...
回答
在语法上类似于所需的伪代码:
library(dplyr)
subchain <- . %>%
filter(mass > mean(mass, na.rm = TRUE)) %>%
select(name, gender, homeworld)
all.equal(
starwars %>%
group_by(gender) %>%
filter(mass > mean(mass, na.rm = TRUE)) %>%
select(name, gender, homeworld),
starwars %>%
group_by(gender) %>%
subchain()
)
使用点.作为管道序列的开始。这实际上接近于函数包装,但这被称为 magrittr 函数序列。查看?functions并尝试magrittr::functions(subchain)