gpt4 book ai didi

r - %in% vs '==' 比较日期和 date_as_string

转载 作者:行者123 更新时间:2023-12-04 12:02:01 26 4
gpt4 key购买 nike

我很困惑为什么%in%'=='在这里给出不同的结果:

day_string <- '2017-07-20'
day_date <- as.Date(day_string)

day_string == day_date #TRUE
day_string %in% day_date #FALSE

来自 %in%帮助: %in%当前定义为 "%in%" <- function(x, table) match(x, table, nomatch = 0) > 0
所以如果我理解正确的话,因为 match将日期强制转换为字符(但首先转换为数字),
day_string %in% day_date 

被翻译成
match(day_string, as.character(as.numeric(day_date)), nomatch = 0) > 0

然而 '=='帮助说它也强制不同类型。什么 '=='在上面的例子中实际上是这样做的,以及为什么它的行为与 %in% 不同?

最佳答案

来自 ?== 的帮助“如果两个参数是不同类型的原子向量,一个被强制转换为另一个的类型”
所以我猜虽然 ==有两个相同类型的向量要比较,%in%正在尝试将日期与字符进行比较。

但是,这只发生在日期与字符之间,即

as.character(5) %in% 5
#[1] TRUE

as.factor('abc') %in% 'abc'
#[1] TRUE

5 %in% 5L
#[1] TRUE

在 OP 的情况下,正如@Cath 提到的, df_date首先转换为数字,然后转换为字符,所以最后的比较是,
as.character(as.numeric(day_date))
#[1] "17367"

as.character(as.numeric(day_date)) %in% day_string
#[1] FALSE

双重检查,
'17367' %in% as.Date(day_string)
#[1] TRUE

关于r - %in% vs '==' 比较日期和 date_as_string,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45210662/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com