【发布时间】:2014-11-10 14:37:56
【问题描述】:
我在一个将 data.frame df 作为参数的函数中使用了dplyr。
有时,我想根据我刚刚创建的名为n 的向量进行过滤。但是,如果 n 也是输入 data.frame 中变量的名称,这将不起作用。
library(dplyr)
df <- data.frame(n = c(0L, 0L))
n <- c(1L, 1L)
filter(df, n == 1L)
#> [1] n
#> <0 rows> (or 0-length row.names)
由于该函数适用于任何数据帧,我想避免这种情况。我尝试使用与全局环境关联的公式/惰性对象,但这返回了相同的结果:
a <- ~ n == 1L
filter_(df, a)
#> [1] n
#> <0 rows> (or 0-length row.names)
a <- lazy(n == 1L)
filter_(df, a)
#> [1] n
#> <0 rows> (or 0-length row.names)
有没有优雅的方法来做到这一点?
【问题讨论】:
-
一个选项是
filter(df, get('n', envir = .GlobalEnv) == 1L) -
谢谢。您知道使用
filter_和lazy_eval中的某些功能的解决方案吗?这就是我尝试使用公式的方法 - 我认为该公式将在全球环境中进行评估。
标签: r lazy-evaluation dplyr