首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与chron和sapply的R上可能存在的错误

与chron和sapply的R上可能存在的错误
EN

Stack Overflow用户
提问于 2017-10-04 09:19:54
回答 1查看 81关注 0票数 2

我对R,一个chron对象和sapply函数有一个问题。我更改了默认的来源:

代码语言:javascript
复制
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

现在,如果我跑:

代码语言:javascript
复制
> sprintf("%s", years(ch[1]))
[1] "2010"

但是,如果我用sapply迭代地运行它,就会得到:

代码语言:javascript
复制
> 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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-04 11:33:56

我会尝试不使用非默认的起源与chron,或至少转换他们的默认来源,尽快。

在这里,我们创建了ch0,它表示与ch相同的日期时间,但具有默认的起源。chron包确实有origin函数(以及origin<-函数)来帮助解决这个问题,但是它不是导出的,所以我们必须用chron:::作为前缀。

代码语言:javascript
复制
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表达式的另一种替代方法是:

代码语言:javascript
复制
ch0 <- ch
chron:::origin(ch0) <- chron:::origin(chron(0))

此外,sapply也可以替换为:

代码语言:javascript
复制
format(years(ch0))

如果没有sapply,我们甚至不需要ch0,所以这是可行的:

代码语言:javascript
复制
format(years(ch))

更新: of chron‘2.3.51’(它刚刚上传到CRAN) origin被导出,所以上面的第一行代码不再需要chron:::

代码语言:javascript
复制
ch0 <- chron(ch, origin = origin(chron(0)))

更新2:已更新备注。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46561301

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档