write.zoo() 自 R 4.3.0 以来改变了行为:as.character.POSIXct() 改变了?

问题描述 投票:0回答:1

周日似乎是从版本 4.2.3 更新到 4.3.2(在 Win 10 上)的好日子,以开始新的一周。

我使用 

R

包将一些时间序列写入基本文本文件以保存数据。这工作了很多年,但在上述升级之后,我遇到了输出的变化,突然午夜时间被遗漏了:

要测试的代码(使用

zoo

版本1.8.12):

zoo

对于 4.3.0 之前的 R,结果如下所示:

library(zoo) write.zoo( zoo( c(46, 47), c(as.POSIXct("2023-11-26 00:00:00"), as.POSIXct("2023-11-26 01:00:00")) ) )

但是从 4.3.0 开始它变成了:

"2023-11-26 00:00:00" 46 "2023-11-26 01:00:00" 47

正如 
"2023-11-26" 46 "2023-11-26 01:00:00" 47

的文档所说,

zoo
write.zoo()
的一个便利函数,我尝试用这个再次获得正确的结果(带有午夜时间戳):
write.table()

输出

write.table( zoo( c(46, 47), c(as.POSIXct("2023-11-26 00:00:00"), as.POSIXct("2023-11-26 01:00:00")) ) )

在任何提到的
"2023-11-26 00:00:00" 46 "2023-11-26 01:00:00" 47

版本下。

所以看起来 

R

函数已经被 R >= 4.3.0 破坏了,但故事还在继续......

正如人们在 

write.zoo

sources
中所看到的,这个函数相当简单,通过在使用 zoo 时复制索引,从动物园对象生成
data.frame
再次测试这个对 POSIXct 对象的非常简单的调用

R

as.character()<4.3.0:

R >=4.3.0:

> as.character(c(as.POSIXct("2023-11-26 00:00:00"), as.POSIXct("2023-11-26 01:00:00"))) [1] "2023-11-26 00:00:00" "2023-11-26 01:00:00"

告诉我,这可能是
> as.character(c(as.POSIXct("2023-11-26 00:00:00"), as.POSIXct("2023-11-26 01:00:00"))) [1] "2023-11-26" "2023-11-26 01:00:00"

失败的原因
现在我很困惑,因为这是非常基本的 R 功能,在

R News

中没有提到要更改。输出看起来也很尴尬 - 为什么要产生两种不同的格式? 关于

R write.table remove 0:00:00 from Timestamps

还有另一个问题,它直接在 write.zoo() 上使用

write.table()
(所以这里没有
data.frame
),并且在我的情况下也产生相同的结果:
zoo

很明显,我的“解决方法”是在 
> write.table(data.frame(Index = c(as.POSIXct("2023-11-26 00:00:00"), as.POSIXct("2023-11-26 01:00:00")), Value = c(46, 47)), row.names = FALSE) "Index" "Value" 2023-11-26 46 2023-11-26 01:00:00 47

对象上使用

write.table()
才有效,因为这些对象内部不同。不幸的是,这超出了我对
zoo
以及
R
行为是否有意且有用的理解。
社区对此有何进一步解释?

r zoo posixct
1个回答
0
投票
as.character()

对象的

as.character()
行为变化引发的。
我刚刚在 R-Forge 上对 

POSIXt

进行了更新,现在使用

write.zoo()
而不是旧的
format(index(x))
(这从来就不是一个理想的选择)。
更新可以通过 R-Forge 安装

as.character(index(x))

© www.soinside.com 2019 - 2024. All rights reserved.