循环多个环境对象 R

Loop Over Multiple Environment Objects R

我希望能够遍历我环境中的多个对象并对每个数据帧进行一些数据清理。有没有一种更有效的方法可以在 1 个电话中完成我在下面所做的事情?

df1 %>%
clean_names()

df2 %>% 
clean_names()

df3 %>%
clean_names()

etc.

将在 mget 环境中创建的所有对象放入 list 中,然后遍历 list 并应用函数

library(purrr)
library(dplyr)
library(janitor)
out <- map(mget(ls(pattern = '^df\d+$')), ~ .x %>%
      clean_names())

ls 中的 pattern 基于正则表达式模式对对象名称进行子集化,该模式检查名称以 (^) 开头且后跟一个 df 的对象字符串末尾 ($) 或更多数字 (\d+)

除了 akrun 的答案之外,您还可以通过 class 从全局环境中过滤对象。 我建议您将更新后的数据框存储在列表中,而不是在全局环境中,但如果您需要,可以使用 list2env.

library(purrr)

mget(ls()) %>%
keep(is.data.frame) %>%
map(janitor::clean_names) %>%
##(DISCLAIMER - this replaces the original data.frames in your global environment, and could be dangerous:)
list2env(envir = .GlobalEnv)

基础 R

library(janitor) # for clean_names function
dfs <- Filter(function(x) is(x, "data.frame"), mget(ls()))

lapply(dfs, clean_names)