为什么在R中将split强制转换为整数并且有一个解决方法

时间:2015-01-09 23:45:01

标签: r split type-conversion

可以从数字类型中构建R中的日期,甚至是小数值。这种情况并不常见,但例如在平均日期时会发生这种情况。不幸的是,他们似乎打破了split

> as.Date(-1, origin = "1970-01-01")
[1] "1969-12-31"
> as.Date(-1.0001, origin = "1970-01-01")
[1] "1969-12-30"
> split(as.Date(-1, origin = "1970-01-01"), 1)[[1]]
[1] "1969-12-31"
> split(as.Date(-1.0001, origin = "1970-01-01"), 1)[[1]]
[1] "1969-12-31" #this is wrong
> unclass(split(as.Date(-1, origin = "1970-01-01"), 1)[[1]])
[1] -1
> unclass(split(as.Date(-1.0001, origin = "1970-01-01"), 1)[[1]])
[1] -1 #this is "why"

所以两个不同的日期等于split。人们是否同意这是一个错误,或者我错过了深层原因?任何解决方法?感谢

1 个答案:

答案 0 :(得分:6)

无论出于何种原因,split.Date强制Date输入为整数:

> split.Date
function (x, f, drop = FALSE, ...) 
{
    y <- split.default(as.integer(x), f, drop = drop)
    for (i in seq_along(y)) class(y[[i]]) <- "Date"
    y
}
<bytecode: 0x2effb98>
<environment: namespace:base>

这至少是函数和文档之间的不合理,因为?Date说,“日期应该是一个整数,但这不会在内部表示中强制执行。”有些人可能认为这是一个错误。我不确定。

您可以直接致电split.default来避免这种情况。

> split.default(as.Date(-1.0001, origin = "1970-01-01"), 1)[[1]]
[1] "1969-12-30"