为了解决这个问题,让我们将mtcars
数据集拆分为几个较小的数据集,例如基于carb
,并将它们全部存储在列表中
mtlist <- group_split(mtcars, carb)
现在让我们说,我只在其中一个数据集上操作一些管道,最后我想使用exposition运算符%$%
:选择一个变量
mtlist[[1]] %>%
mutate(cyl = 6*cyl) %$%
cyl
输出:
24 36 36 24 24 24 24
但是,如果我希望在整个mtlist
上这样做呢?以下不起作用:
mtlist %>%
map(mutate, cyl = 6*cyl) %$%
cyl
那么该怎么做呢?
我知道我可以通过其他方式实现相同的最终输出,例如map(select, cyl)
,但我希望学习如何使用展示管道%$%
来实现,特别是。
如果您查看%$%
的文档,它会显示:
[%$%][e]将lhs中的名称导出到rhs表达式。当函数没有内置的数据参数时,这很有用。
在您的情况下,lhs
的名称就是列表的名称,因此您不能真正直接使用cyl
。你必须在map
呼叫中完成:
library(magrittr)
library(purrr)
library(dplyr)
mtlist %>%
map(mutate, cyl = 6*cyl) %>%
map(~ .x %$% cyl)
返回
[[1]]
[1] 24 36 36 24 24 24 24
[[2]]
[1] 48 24 24 24 48 48 48 24 24 24
[[3]]
[1] 48 48 48
[[4]]
[1] 36 36 48 36 36 48 48 48 48 48
[[5]]
[1] 36
[[6]]
[1] 48