如何解决对R中的列表中的所有小标题应用相同的操作
我创建了一个列表,其中的元素是(命名的)小标题。我想一次对所有小标题应用相同的操作。我确信这很容易实现,但是我什么也找不到:
让我们使用mtcars dat集。我的列表看起来像这样,但更大:
allData <- mtcars %>%
group_by(cyl) %>%
group_map(~ head(.x,2L))
现在,我要计算ratio
,即马力/齿轮
在data.table中,我只会使用:
dt[,ratio := hp/gear]
但是我不确定如何对列表中组织的多个小标题应用相同的操作?
也许将它们转换为其他格式会更有效吗?
我打算对小标题进行更复杂的操作,我只是想在一个简单的示例上弄清楚如何做到这一点。
解决方法
通过lapply
进行操作:
lapply(allData,function(x) transform(x,ratio = hp/gear))
#Or
lapply(allData,function(x) dplyr::mutate(x,ratio = hp/gear))
因此,如果您要在每个列表中执行其他一些复杂的操作,则可以扩展匿名函数。
lapply(allData,function(x) {
x <- transform(x,ratio = hp/gear)
#More things to do
})
,
这就是purrr
和map_*
函数家族的作用。实际上,这与lapply()
解决方案是一样的,但是您无需声明匿名函数。
library(purrr)
allData %>%
map( ~ mutate(.x,ratio = hp/gear))
您可以使其更加复杂,包括熟悉的管道。
allData %>%
map( ~ .x %>%
mutate(ratio = hp/gear) %>%
...)
,
我们也可以使用
lapply(allData,function(x) {x$ratio <- x$hp/x$gear; x})
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。