R中dplyr滤波器内部的外部功能

R中dplyr滤波器内部的外部功能,r,dplyr,R,Dplyr,dplyr::filter中的外部函数如何仅通过列的名称而不使用它所来自的data.frame来识别列 例如考虑下面的代码: filter(hflights, Cancelled == 1, !is.na(DepDelay)) is.na如何知道DepDelay来自hflights?可能在我的代码中的其他地方定义了DepDelay向量。假设hflights具有名为“Cancelled”、“DepDelay”的列 在python中,我们必须使用列名和数据帧的名称。所以在这里,我期待着类似的事情

dplyr::filter中的外部函数如何仅通过列的名称而不使用它所来自的data.frame来识别列

例如考虑下面的代码:

filter(hflights, Cancelled == 1, !is.na(DepDelay))
is.na如何知道DepDelay来自hflights?可能在我的代码中的其他地方定义了DepDelay向量。假设hflights具有名为“Cancelled”、“DepDelay”的列

在python中,我们必须使用列名和数据帧的名称。所以在这里,我期待着类似的事情

!is.na(hflights$DepDelay)

任何帮助都将不胜感激。

虽然我不是一个能够给出准确答案的专家,但希望我不会把你引入歧途太远

这本质上是一个环境问题。过滤器首先在其第一个参数中命名的数据帧环境中查找任何向量对象。如果它找不到它,那么它将上升一个级别,可以说,上升到全局环境,并寻找任何其他同名的向量对象。考虑:

library(dplyr)

Species <- iris$Species
iris2 <- select(iris, -Species) # Remove the Species variable from the data frame.

filter(iris2, Species == "setosa")
#>    Sepal.Length Sepal.Width Petal.Length Petal.Width
#> 1           5.1         3.5          1.4         0.2
#> 2           4.9         3.0          1.4         0.2
#> 3           4.7         3.2          1.3         0.2
#> 4           4.6         3.1          1.5         0.2
#> 5           5.0         3.6          1.4         0.2
得到与上面相同的输出。将管道的概念结合起来,并将变量的词法范围集中到引用的数据帧,意味着为人类带来更可读的代码,这是tidyverse包集的原则之一,dplyr和tidyr都是其组件

iris %>% 
  select(-Species) %>% 
  filter(Species == "setosa")