执行主要代码时,我有一些大的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)是否可以将此方法(或替代方法)扩展到函数内部和全局环境(或另一个环境)中的数据框?怎么样?
在此先感谢任何指针!