有没有一种方法可以设置as.Date的默认起始日期?我做了这个函数来解决问题:
as.date=function(x, origin='1970-01-01') as.Date(x, origin=origin)
例如:as.Date(0)
Error in as.Date.numeric(0) : 'origin' deve ser especificado
as.date(0)
[1] "1970-01-01"
这个 zoo 包添加了一个默认的起始点:
library(zoo)
as.Date(0)
## [1] "1970-01-01"
虽然已经过去了几年,但看起来R已经添加了.Date
,因此我们现在可以仅使用基本的R来完成此操作。
.Date(0)
## [1] "1970-01-01"
require(anytime)
基本的方法很简单:
anytime(0)
返回东部标准时间的值为:[1] "1969-12-31 19:00:00 EST"
如果你想将其强制转换为UTC时间:
anytime(0, asUTC=TRUE)
返回结果为:
[1] "1970-01-01 UTC"
如果你想告诉R你的数据来自某个特定的时区:
Sys.setenv(TZ= 'desiredTimeZone')
其中 'desiredTimeZone' 是你的日期收集所在的时区。不是真的。在会话中,无法更改“ origin”日期并使其永远适用。
如果您查看as.Date
的参数(即函数),则当x
为numeric
时,origin
没有默认值。
## S3 method for class 'numeric'
as.Date(x, origin, ...)
或许为as.Date
函数提供origin
的默认值是一个不错的扩展。
OP创建了包装函数来消除对origin
的依赖,这样做很好。也许该函数可以稍微改进一下:
根据@sm1和@Gregor的建议修改的函数。
## if date.origin is not defined then origin will be taken as "1970-01-01
options(date.origin = "1970-01-01")
as.date <- function(x, origin = getOption("date.origin")){
origin <- ifelse(is.null(origin), "1970-01-01", origin)
as.Date(x, origin)
}
## Results: (When date.origin is not set)
## > as.date(0)
## [1] "1970-01-01"
## > as.date(2)
## [1] "1970-01-03"
## Results: (When date.origin is set)
## > options(date.origin = "1970-01-05")
## > as.date(2)
## [1] "1970-01-07"
as.date <- function(x, origin = ORIGIN)
- xm1ORIGIN
没有被定义。在这种情况下,函数不应崩溃或返回错误。 - MKRORIGIN
未定义的情况,但似乎 option
更好。 - MKR
zoo
包是如何实现并复制它。 - Gregor Thomasas.date=function(x) as.Date(x,origin='1970-01-01')
。 - xm1