在不同环境下的多个数据帧上应用相同的过滤器

时间:2019-03-21 00:01:05

标签: r dplyr purrr

执行主要代码时,我有一些大的sf对象驻留在全局环境中。该主要代码调用create_foo_map函数,这些函数使用大型sf对象的过滤版本,并导入/创建自己的较小sf对象,应将相同的过滤器应用于该对象。理想情况下,过滤器将在create_foo_map内部运行,并且不影响全局环境中的大型对象。

This post on list2env使我想到了类似的内容,该方法将相同的过滤器应用于各种数据集,但需要进行大量调整才能在两种环境下工作。

library(dplyr)
library(purrr)

set.seed(100)


volcano1 <- sample_frac(faithful, 0.25)
volcano2 <- sample_frac(faithful, 0.25)
volcano3 <- sample_frac(faithful, 0.25)
volcano4 <- sample_frac(faithful, 0.25)



exclude <- function(df) {

  df <- get(df)

  df %>% 
    filter(waiting > 90)

}


basic_obj <- ls(pattern = "volcano")

mod_obj <- map(basic_obj, exclude) 

names(mod_obj) <- basic_obj

list2env(mod_obj, envir = environment())
#> <environment: R_GlobalEnv>

所以,我有两个(一组)问题:

1)这是在多个数据帧上应用相同过滤器的最简单方法吗?我当时在想purrr::modify,但最终并没有得到更简单的答案。

2)是否可以将此方法(或替代方法)扩展到函数内部和全局环境(或另一个环境)中的数据框?怎么样?

在此先感谢任何指针!

0 个答案:

没有答案