2

我仍在努力更好地了解 mlply 的工作原理。这是我的数据集的简化版本:

days <- list(c(as.POSIXct("2010-08-29 00:00:00 EDT"), as.POSIXct("2010-08-30 00:00:00 EDT")))
day2 <- list(c(as.POSIXct("2010-07-22 00:00:00 EDT"), as.POSIXct("2010-07-23 00:00:00 EDT"), as.POSIXct("2010-07-24 00:00:00 EDT")))
days <- append(day2, days)
arrivals <- data.frame(date=as.POSIXct("2010-08-29 21:00:00 EDT"), size=72)
arrivals <- rbind(arrivals, c("2010-07-22 17:30:00 EDT",84))

使用 mapply 和 pmax 来选择天数和到达之间的最大值,我得到以下信息:

starting <- mapply(function(x,y){pmax(x,y)},days,arrivals$date)
starting[[1]]
"2010-08-29 21:00:00 EDT" "2010-08-29 21:00:00 EDT" "2010-08-29 21:00:00 EDT"

我确定使用 mlply 的下一个版本不是等效的,显然是我的错误,但是我不太确定为什么输出不同。

starts <- mlply( cbind(arrivals$date,days), function(date,days){pmax(date,days)})
as.POSIXct(starts[[1]], origin='1970-1-1')
[1] "2010-08-30 02:00:00 EDT" "2010-08-30 02:00:00 EDT" "2010-08-30 02:00:00 EDT"

理想情况下,我正在寻找如何使用 mlply 重写 mapply 语句。提前致谢,--JT

4

1 回答 1

3

比较

> starts[[1]]
[1] 1283112000 1283112000 1283112000
> as.numeric(starting[[1]])
[1] 1283112000 1283112000 1283112000
> 

POSIX 对 UTC/GMT 的引用。在您的示例中,您似乎提前了 5 个小时。这是内部的输出问题,它们似乎是同一时间。进一步的评论是困难的。这取决于您正在运行的操作系统。它可能会受到您的语言环境设置等的影响。

Also as.POSIXct gives an unexpected timezone suggests there maybe an issue with as.POSIXct.date but Im not sure if this is still an issue.

于 2012-07-17T18:36:45.173 回答