【问题标题】:Apply function to each element of a list in R using purrr:map使用 purrr:map 将函数应用于 R 中列表的每个元素
【发布时间】:2019-05-26 14:30:12
【问题描述】:

我一直在努力将使用 dplyr 的自定义函数应用于小标题列表。以下 sn-p 使用 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)的包而不是 base R。

【问题讨论】:

    标签: r loops dplyr purrr


    【解决方案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 作为第一个参数。

    【讨论】:

      猜你喜欢
      • 2014-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-13
      相关资源
      最近更新 更多