R和Rscript给出了datetime的不同结果

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

当我尝试在RStudio上执行以下代码时

library(lubridate)
library(data.table)

a <- data.frame(c("2017-12-01 00:01:00","2017-12-02 00:01:00"),c(5,6))
colnames(a) <- c("t", "x")
a <- as.data.table(a)
a[, t := parse_date_time(t, orders = "ymd HMS")]
print(class(a$t))
paste("a:", format(a[1,1], format = "%Y-%m-%d %H:%M:%S"))

我有以下结果:

[1] "a: 2017-12-01 00:01:00"

但是当我尝试在Rscript下运行相同的代码时,输​​出是

[1] "a: 1"

有没有人和我有同样的问题?任何帮助表示赞赏。

编辑:R版本3.3.1,平台x86_64-w64-mingw32 / x64。

Windows Server 2012版本:

主要的小修建版

6 2 9200 0

r rstudio rscript
1个回答
2
投票

真正的问题是data.table。在data.table的早期版本中,如果我们使用数字索引而没有with=FALSE,那么它将返回数字索引本身。因此输出,有问题。有关详细信息,可以查看data.table的文档。

然而,在data.table的最新版本中,这个问题已经解决,因此,data.table几乎像data.frame一样工作。这就是为什么没有人能够复制问题中共享的输出的原因。

下面是更新的代码,使用with=FALSE选项和data.table。

library(lubridate)
library(data.table)

a <- data.frame(c("2017-12-01 00:01:00","2017-12-02 00:01:00"),c(5,6), stringsAsFactors=FALSE) # stringsAsFactors=TRUE
colnames(a) <- c("t", "x")
a$t1 <- parse_date_time(a$t, orders = "ymd HMS")
a <- as.data.table(a)
a[, t := parse_date_time(as.character(t), orders = "ymd HMS")]
print(class(a$t))
paste("a:", format(a[1,1, with=FALSE], format = "%Y-%m-%d %H:%M:%S"))

您可以使用sessionInfo()获取有关包版本的信息。使用软件包版本,可以识别问题。

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