我可以在不调用数据集两次的情况下将数据集管道化为两个函数吗?

Can I pipe a dataset into two functions without calling the dataset twice?

R 中,假设我有一个数据集,我想 运行 函数 str()summary()

在基地R,我会这样做。

summary(data)
str(data)

如果我使用 magrittr 或整个 tidyverse 套件,我更喜欢这样做。

data %>% str()
data %>% summary()

但是,我不得不说 data 两次,我不喜欢这样。当然现在,

data %>%
str() %>%
summary()

不起作用,因为管道不是这样工作的。

有没有一种方法可以使用一些运算符或函数,这样我只需调用 data 一次?

您可以使用 magrittr "Tee pipe"

library(magrittr)

mtcars %T>%
  str %>%
  summary

如果您对 "advanced" 管道感兴趣,请查看文档。 magrittr vignette 显示了 %T>%%$%%<>% 的示例以及专用管道的其他便利功能。

如果您希望保留结果:

library(tidyverse)
mtcars %>% 
  map(lst(nrow, ncol), ~.(.y), .)
#> $nrow
#> [1] 32
#> 
#> $ncol
#> [1] 11