R中的两个表达式应产生相同的答案,但它们不';T

R中的两个表达式应产生相同的答案,但它们不';T,r,R,我是R新手,目前正在通过R为数据科学工作,自学一些基础知识。我正在做第5.2.4章中的练习,在做这些练习时,我尝试创建两个版本的过滤代码,我假设这两个版本是等效的。 为此,我加载了以下软件包: 库(nycflights13)库(tidyverse) 然后我想从包含的航班数据集中过滤掉那些在午夜到早上6点之间起飞的航班。我使用了以下代码: d1 <- filter(flights, dep_time >= 0 & dep_time <= 600) #yields 934

我是R新手,目前正在通过R为数据科学工作,自学一些基础知识。我正在做第5.2.4章中的练习,在做这些练习时,我尝试创建两个版本的过滤代码,我假设这两个版本是等效的。 为此,我加载了以下软件包:
库(nycflights13)
库(tidyverse)

然后我想从包含的航班数据集中过滤掉那些在午夜到早上6点之间起飞的航班。我使用了以下代码:

d1 <- filter(flights, dep_time >= 0 & dep_time <= 600)  #yields 9344 rows
d2 <- flights[between(flights$dep_time, 0 , 600),]   # yields 17599 rows
d3 <- filter(flights, between(dep_time,0,600))      #again yields 9344 rows

d1=0&dep_time除了TRUE/FALSE之外,还缺少返回NA的元素,当我们将NA作为逻辑元素之一时,返回的行将是NA。这可能是我们有更多行的原因

sum(between(flights$dep_time, 0 , 600), na.rm = TRUE)
#[1] 9344
过滤器将考虑
NA
元素并删除这些NA元素


一个选项是将
NA
元素返回为'FALSE'

i1 <- between(flights$dep_time, 0, 600)  & !is.na(flights$dep_time)
d2 <- flights[i1,]
dim(d2)
#[1] 9344   19

i1这有助于理解发生了什么。非常感谢。