Примените функцию к каждому элементу списка в R, используя purrr: map - PullRequest
0 голосов
/ 28 декабря 2018

Я пытался применить пользовательскую функцию с помощью 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"

Я полагаю, что это возможно с помощью карты, но, очевидно, я что-то упускаю: /

Примечание: это близко к Переименовать столбцы Data.frame вlist , но я спрашивал, как это сделать, используя пакеты из tidyverse (конкретно purrr), а не из базы R.

1 Ответ

0 голосов
/ 31 декабря 2018

Поскольку 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 в качестве первогоаргумент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...