我一直在努力将使用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的包来做到这一点。
因为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
作为第一个参数。