r - R data.table fwrite() 中的错误?
问题描述
我在 data.table::fwrite: future dates reset to 1901 中发现了意外行为。我使用 2999 年来掩盖未指定的日期,以确定事件是否在某个日期之前发生。
这是我的例子:
> library("data.table", lib.loc="~/Library/R/3.5/library")
data.table 1.11.4 Latest news: http://r-datatable.com
> DT <- data.table(A=1:5)
> DT[1, D:=as.POSIXct("2018-01-01")]
> DT[2, D:=as.POSIXct("2020-12-31")]
> DT[3, D:=as.POSIXct("2040-12-31")]
> DT[4, D:=as.POSIXct("2099-12-31")]
> dput(DT)
structure(list(A = 1:5, D = structure(c(1514793600, 1609401600,
2240553600, 4102387200, NA), class = c("POSIXct", "POSIXt"), tzone = "")), row.names = c(NA, -5L), class = c("data.table", "data.frame"), .internal.selfref = <pointer: 0x103833ce0>)
它按预期打印在控制台上:
> DT
A D
1: 1 2018-01-01
2: 2 2020-12-31
3: 3 2040-12-31
4: 4 2099-12-31
5: 5 <NA>
但是,当将 fwrite() 用于文件或控制台时,某些日期会发生变化:
> fwrite(DT, file = "")
A,D
1,2018-01-01T08:00:00Z
2,2020-12-31T08:00:00Z
3,1901-12-14T.�48364Z
4,1901-12-14T.�48364Z
5,
在 2030 和 2040 之间的某个地方,日期更改为 1901。我(10 个十进制数字)不应该超出双数表示(15 个十进制数字)的限制。有任何想法吗?
macOS 10.13.6;R版本3.5.1(2018-07-02);数据表 1.11.4
解决方案
fwrite
使用用 C 编写的函数来完成所有工作,默认使用日期和日期时间的自定义处理程序。我建议在包的 GitHub 页面上创建一个问题。
在那之前,这有效:
fwrite(DT, dateTimeAs = "write.csv")
# A,D
# 1,2018-01-01
# 2,2020-12-31
# 3,2040-12-31
# 4,2099-12-31
# 5,
推荐阅读
- haskell - 关于 Haskell 中的组合的困惑
- javascript - 如何从 Html 表中获取 ID?
- angularjs - AngularJS自定义过滤器重复
- css - 用于类和属性的 CSS 选择器
- php - 执行 SELECT 时 mysqli::num_rows 和 mysqli::affected_rows 之间是否有真正的区别
- oracle - 调用带有 out 参数的 SP
- python - ValueError:输入包含 NaN、无穷大或对于 dtype('float64') 而言太大但 id 没有的值,异常检测
- python - 用txt文件叠加一些图
- javascript - 视频无法通过异步可观察调用播放
- typescript - 将无类型的 JavaScript 选项属性添加到声明的类