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

时间:2018-12-28 20:38:33

标签: r loops dplyr purrr

我一直在努力使用dplyr将自定义函数应用于小标题列表。以下代码段可以使用for循环正常运行:

for (Entry<AClass, Future<String>> a : b.entrySet()) {

根据purrr文档,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) } :“(...)将函数迭代地应用于列表或向量的每个元素”,但会引发错误:

map

我想使用map应该有可能,但是显然我缺少了一些东西:/

注意:这接近Rename Columns of Data.frame in list,但是我在问如何使用tidyverse(特别是map(df, rename_all(toupper)) Error in UseMethod("tbl_vars") : no applicable method for 'tbl_vars' applied to an object of class "function" )而不是基于R的软件包来实现它。

1 个答案:

答案 0 :(得分:1)

因为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作为第一个参数。