R 中的奇数 POSIXct 函数行为
Odd POSIXct Function Behavior In R
我在 R 中使用 POSIXct 数据类型。在我的工作中,我合并了一个函数,该函数 return 在向量中包含两个 POSIXct 日期。但是,我发现了一些意想不到的行为。我写了一些示例代码来说明我的问题:
# POSIXct returning issue:
returnTime <- function(date) {
oneDay <- 60 * 60 * 24
nextDay <- date + oneDay
print(date)
print(nextDay)
return(c(date, nextDay))
}
myTime <- as.POSIXct("2015-01-01", tz = "UTC")
bothDays <- returnTime(myTime)
print(bothDays)
函数中的打印语句给出:
[1] "2015-01-01 UTC"
[1] "2015-01-02 UTC"
虽然代码末尾的打印语句给出:
[1] "2014-12-31 19:00:00 EST" "2015-01-01 19:00:00 EST"
我明白发生了什么,但我不明白为什么。这可能是一个逃避我的简单错误,但我真的很困惑。我不明白为什么 return 上的时区会发生变化。 class 仍然是 POSIXct,只是时区发生了变化。
此外,我做了与上面相同的操作,但只是 returned 了其中一个日期,并且日期的时区没有改变。我现在可以解决这个问题,但想看看是否有人对我的问题有任何见解。提前致谢!
感谢下方的帮助。我反而做了:
return(list(date, nextDay))
这解决了我的时区被删除的问题。
来自?c.POSIXct
:
Using c
on "POSIXlt" objects converts them to the current time zone,
and on "POSIXct" objects drops any "tzone" attributes (even if they
are all marked with the same time zone).
另见 here。
问题是函数 c
删除了时区属性:
attributes(myTime)
#$class
#[1] "POSIXct" "POSIXt"
#
#$tzone
#[1] "UTC"
attributes(c(myTime))
#$class
#[1] "POSIXct" "POSIXt"
要修复,您可以例如使用 data.table
中的 setattr
函数来修改属性:
(setattr(c(myTime), 'tzone', attributes(myTime)$tzone))
#[1] "2015-01-01 UTC"
我在 R 中使用 POSIXct 数据类型。在我的工作中,我合并了一个函数,该函数 return 在向量中包含两个 POSIXct 日期。但是,我发现了一些意想不到的行为。我写了一些示例代码来说明我的问题:
# POSIXct returning issue:
returnTime <- function(date) {
oneDay <- 60 * 60 * 24
nextDay <- date + oneDay
print(date)
print(nextDay)
return(c(date, nextDay))
}
myTime <- as.POSIXct("2015-01-01", tz = "UTC")
bothDays <- returnTime(myTime)
print(bothDays)
函数中的打印语句给出:
[1] "2015-01-01 UTC"
[1] "2015-01-02 UTC"
虽然代码末尾的打印语句给出:
[1] "2014-12-31 19:00:00 EST" "2015-01-01 19:00:00 EST"
我明白发生了什么,但我不明白为什么。这可能是一个逃避我的简单错误,但我真的很困惑。我不明白为什么 return 上的时区会发生变化。 class 仍然是 POSIXct,只是时区发生了变化。
此外,我做了与上面相同的操作,但只是 returned 了其中一个日期,并且日期的时区没有改变。我现在可以解决这个问题,但想看看是否有人对我的问题有任何见解。提前致谢!
感谢下方的帮助。我反而做了:
return(list(date, nextDay))
这解决了我的时区被删除的问题。
来自?c.POSIXct
:
Using
c
on "POSIXlt" objects converts them to the current time zone, and on "POSIXct" objects drops any "tzone" attributes (even if they are all marked with the same time zone).
另见 here。
问题是函数 c
删除了时区属性:
attributes(myTime)
#$class
#[1] "POSIXct" "POSIXt"
#
#$tzone
#[1] "UTC"
attributes(c(myTime))
#$class
#[1] "POSIXct" "POSIXt"
要修复,您可以例如使用 data.table
中的 setattr
函数来修改属性:
(setattr(c(myTime), 'tzone', attributes(myTime)$tzone))
#[1] "2015-01-01 UTC"