我想使用一些过滤条件将数据框分成数据框列表,所以我写了一些像这样的代码
library(dplyr)
mySpecies <- iris$Species %>% levels
iris %>%
function(y) lapply(mySpecies, function(x) filter(y, Species == x))
工作正常。
从内在功能的角度来看,&#34; y
&#34;住在parent.env(environment())
,所以我们也可以写
iris %>%
function(x) lapply(mySpecies, function(x) filter(get("x", parent.env(environment())), Species == x))
我的问题是:指定我们正在访问的价值环境是否更好?如果我不这样做,我是否会遇到麻烦?
答案 0 :(得分:0)
最好避免get
成为可能。怎么样的
iris %>%
function(y) lapply(mySpecies, function(x, y) filter(y, Species == x), y=y)
或者您也可以考虑将split
函数与友好的包装器一起使用
dsplit <- function(x, col) split(x, x[[col]])
iris %>% dsplit("Species")
当然,后者将为每个物种创建一个组,您的第一种方法只允许提取子集。