使用purrr:map将函数应用于R中列表的每个元素

问题描述 投票:0回答:1

我一直在努力将使用dplyr的自定义函数应用到一个字节列表中。以下代码段使用for循环正常工作:

df <- list(as_tibble(head(mtcars[, 1:2])), as_tibble(tail(mtcars[, 1:2])), as_tibble(mtcars[13:18, 1:2]))

for (d in seq_along(df)) { 
  df[[d]] <- df[[d]] %>% rename_all(toupper) 
}

根据purrr文档,map:“(...)迭代地将一个函数应用于列表或向量的每个元素”,但抛出错误:

map(df, rename_all(toupper))
Error in UseMethod("tbl_vars") : 
  no applicable method for 'tbl_vars' applied to an object of class "function"

我想应该可以使用地图,但很明显我错过了一些东西:/

注意:这接近于Rename Columns of Data.frame in list,但我问的是如何使用来自tidyverse(特别是purrr)而不是基础R的包来做到这一点。

r loops dplyr purrr
1个回答
2
投票

因为OP要求使用purrr函数的解决方案,我们可以做到

library(purrr); library(dplyr)
map(df, .f = ~ rename_all(.x, toupper))
# or map(df, .f = ~ set_names(.x, toupper(names(.x))))

#[[1]]
# A tibble: 6 x 2
#    MPG   CYL
#* <dbl> <dbl>
#1  21       6
#2  21       6
#3  22.8     4
#4  21.4     6
#5  18.7     8
#6  18.1     6

#[[2]]
# ...

OP的解决方案不起作用的原因是rename_all期望data.frame / tibble作为第一个参数。

© www.soinside.com 2019 - 2024. All rights reserved.