我有一个简单的问题。我在R中有两个Date对象应该是相同的(它们具有相同的值和类),但R表示它们不相等。我在Linux上运行虽然我在Windows机器上得到了相同的结果。为什么会这样?
代码:
start=as.Date("2014-12-31")
finish=as.Date("2014-11-28")
dates = seq(start,finish,length=6)
christmasEve = as.Date("2014-12-24")
print(dates[2])
print(christmasEve)
print(class(dates[2]))
print(class(christmasEve))
(christmasEve==dates[2])
输出:
[1] "2014-12-24"
[1] "2014-12-24"
[1] "Date"
[1] "Date"
[1] FALSE
非常感谢任何帮助!
-Paul
答案 0 :(得分:2)
问题在于你将天数除以六乘六的倍数。退房:
as.numeric(dates)
# [1] 16435.0 16428.4 16421.8 16415.2 16408.6 16402.0
start - finish
# Time difference of 33 days
答案 1 :(得分:2)
由于您将日期创建为序列,因此日期不是精确的整数。
> as.numeric(dates)
[1] 16435.0 16428.4 16421.8 16415.2 16408.6 16402.0
> as.numeric(christmasEve)
[1] 16428
> as.character(christmasEve) == as.character(dates[2])
[1] TRUE
答案 2 :(得分:0)
由于没有sampleRate
,因此无法测试您的代码。我假设sampleRate
是6.您可以将您的日期与以下代码进行比较:
all(as.character(christmasEve) == as.character(dates[2]))
整个事情应该像那样工作
> sampleRate <- 6
>
> start=as.Date("2014-12-31")
> finish=as.Date("2014-11-28")
> dates = seq(start,finish,length=sampleRate)
> christmasEve = as.Date("2014-12-24")
> print(dates[2])
[1] "2014-12-24"
> print(christmasEve)
[1] "2014-12-24"
> print(class(dates[2]))
[1] "Date"
> print(class(christmasEve))
[1] "Date"
> (christmasEve==dates[2])
[1] FALSE
>
> all(christmasEve == dates[2])
[1] FALSE
> all(as.character(christmasEve) == as.character(dates[2])
+ )
[1] TRUE