r - 将 POSIXlt 对象与日期字符串进行比较是否正确?

标签 r date coercion posixlt

我最近遇到了将 POSIXlt 日期对象与日期字符串进行比较的 R 代码。

as.POSIXlt.date("2007-02-02") >= "2007-02-01"
[1] FALSE

结果,至少对我来说令人惊讶的是,是假的。我期望 POSIXlt 对象将被强制转换为字符向量,因此不等式应该测试为 TRUE。然后我尝试了显式强制并将任一方强制转换为另一方的类型,结果为真。
as.character(as.POSIXlt.date("2007-02-02")) >= "2007-02-01"
[1] TRUE


as.POSIXlt.date("2007-02-02") >= as.POSIXlt.date("2007-02-01")
[1] TRUE

我认为将 LHS 日期对象强制转换为字符向量在语义上是错误的,因为这样的比较将是字典序的,这不是预期的(尽管在这种情况下它的评估结果为 TRUE)。我对吗?

在我看来,第三个表达式是语义正确的代码。但是为什么第一个代码不起作用(它评估为 FALSE)?在比较它们之前,R 不会强制双方使用字符向量吗?

这是我的平台信息:
R version 3.1.0 (2014-04-10) -- "Spring Dance"
Platform: x86_64-redhat-linux-gnu (64-bit)

我是 R 的新手。非常感谢任何帮助。

谢谢,
法尔汉

最佳答案

一般来说,日期都应该是 class进行比较时的日期。
它在某些情况下有效,因为 R 转换字符串 "2007-02-01"在幕后进入 Date ,在某些情况下可能会失败:

as.Date("2020-09-12") <= "2020:09:13"
# Error in charToDate(x) : 
#   character string is not in a standard unambiguous format
另外,请注意不同的 Date 方法,它们不兼容:
as.POSIXlt("2007-02-02") <= as.Date("2020,01,12", "%Y,%m,%d")
#   sec    min   hour   mday    mon   year   wday   yday  isdst   zone gmtoff 
#  TRUE   TRUE   TRUE   TRUE   TRUE   TRUE   TRUE   TRUE   TRUE     NA     NA 
#Warning messages:
#1: Incompatible methods ("Ops.POSIXt", "Ops.Date") for "<=" 
#2: NAs introduced by coercion 
顺便说一句,我无法再重现第一个示例(R 版本 4.0.3):
as.POSIXlt.date("2007-02-02") >= "2007-02-01"
# Error in as.POSIXlt.date("2007-02-02") : 
#   could not find function "as.POSIXlt.date"

as.POSIXlt.Date("2007-02-02") >= "2007-02-01"
# [1] NA
# Warning message:
# In as.POSIXlt.Date("2007-02-02") : NAs introduced by coercion

关于r - 将 POSIXlt 对象与日期字符串进行比较是否正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25731781/

相关文章:

rust - 使用 impl Trait 时如何获得 Deref 强制

随着时间的推移构建子集的滚动中位数

r - 为什么采样矩阵行很慢?

t-sql - 有没有办法在 T-SQL 中执行具有一系列增量的 DATEADD() ?

Java.util.Date : try to understand UTC and ET more

string - 混合(字符和数字)变量的逻辑查询

读取 csv 但跳过字符串中的转义逗号

从R中的数据框中删除重复行

android - 格式化 System.currentTimeMillis()

rust - 为什么对数组的嵌套引用不会强制转换为切片?