我对R,一个chron对象和sapply函数有问题。我改变了默认原点:用chron和sapply在R上的可能的错误
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版本是“R版本3.4.2(2017-09-28)”,运行在GNU/Linux openSUSE Leap 42.2 64位上。 Chron软件包版本是2.3-45
我在R 3.4.1上得到了这个行为在Windows 7与Chron 2.3-50。 –
'sapply'(像'lapply')应该作用于'list'对象。如果不是,则调用'as.list'。看到'as.list(ch)'将失去任何关于原点的迹象。所以'年代'将会采用标准的POSIX起源(1970年1月1日)。另外,在你的例子中,你可以简单地尝试'sprintf(“%s”,years(ch))' – nicola
实际上我正在做的比这个有点复杂,所以'sprintf(“%s”,years(ch)) '不适合我。我刚刚通过做循环来解决这个问题 –