Вот что происходит.bar
создается с использованием as.POSIXct.numeric
, которое определяется как:
as.POSIXct.numeric
function (x, tz = "", origin, ...)
{
if (missing(origin))
stop("'origin' must be supplied")
as.POSIXct(origin, tz = tz, ...) + x
}
<environment: namespace:base>
Вы указываете источник, который является POSIXct
объектом.Это означает, что вызов as.POSIXct
в as.POSIXct.numeric
отправляет as.POSIXct.default
, который определяется как:
as.POSIXct.default
function (x, tz = "", ...)
{
if (inherits(x, "POSIXct"))
return(x)
if (is.character(x) || is.factor(x))
return(as.POSIXct(as.POSIXlt(x, tz, ...), tz, ...))
if (is.logical(x) && all(is.na(x)))
return(.POSIXct(as.numeric(x)))
stop(gettextf("do not know how to convert '%s' to class \"POSIXct\"",
deparse(substitute(x))))
}
<environment: namespace:base>
x
- это объект класса POSIXct
(origin
, который вы указали в вашемначальный вызов), поэтому он просто возвращается, а аргумент tz=
игнорируется.
ОБНОВЛЕНИЕ:
Вот как можно преобразовать foo
обратно в POSIXct
с соответствующим часовым поясом.
(foo <- as.POSIXct("2011-04-04 14:18:58", tz="GB"))
# [1] "2011-04-04 14:18:58 BST"
.POSIXct(as.numeric(foo), tz="GB")
# [1] "2011-04-04 14:18:58 BST"