我对R,一个chron对象和sapply函数有一个问题。我更改了默认的来源:
chron_start <- chron("01/01/2010", "00:30:00",origin.=c(month=1, day=1, year=1900))
ch <- chron_start+(0:(365*24-1))/24现在,如果我跑:
> sprintf("%s", years(ch[1]))
[1] "2010"但是,如果我用sapply迭代地运行它,就会得到:
> anios <- sapply(ch, function(x){sprintf("%s", years(x))})
> anios[1]
[1] "2080"所以它提前了70年,这就是我的起源(1900)和缺省起源(1970)之间的区别。
我想问一下,这种情况是否发生在您身上,以便发送错误报告,或者是否对此行为有解释,以及如何解决它。
提前谢谢!!
P.S.:我的R版本是“RVersion3.4.2 (2017-09-28)",运行在GNU/Linux openSUSE Leap 42.2 64位上。Chron软件包版本为2.3-45
发布于 2017-10-04 11:33:56
我会尝试不使用非默认的起源与chron,或至少转换他们的默认来源,尽快。
在这里,我们创建了ch0,它表示与ch相同的日期时间,但具有默认的起源。chron包确实有origin函数(以及origin<-函数)来帮助解决这个问题,但是它不是导出的,所以我们必须用chron:::作为前缀。
ch0 <- chron(ch, origin = chron::origin(chron(0)))
# now we get the expected years
anios <- sapply(ch0, function(x){sprintf("%s", years(x))})
head(anios)
## [1] "2010" "2010" "2010" "2010" "2010" "2010"注:上述ch0表达式的另一种替代方法是:
ch0 <- ch
chron:::origin(ch0) <- chron:::origin(chron(0))此外,sapply也可以替换为:
format(years(ch0))如果没有sapply,我们甚至不需要ch0,所以这是可行的:
format(years(ch))更新: of chron‘2.3.51’(它刚刚上传到CRAN) origin被导出,所以上面的第一行代码不再需要chron:::
ch0 <- chron(ch, origin = origin(chron(0)))更新2:已更新备注。
https://stackoverflow.com/questions/46561301
复制相似问题