почему split coerce double в integer в R и есть ли обходной путь
можно строить даты в 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 ответов
по какой причине split.Date
coerces Date
ввод в integer:
> 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"