使用mlply与mapply的不同pmax输出

时间:2012-07-17 18:06:54

标签: r plyr

我仍在努力更好地了解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))

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

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

1 个答案:

答案 0 :(得分:3)

比较

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

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

同样as.POSIXct gives an unexpected timezone表明as.POSIXct.date可能存在问题,但我不确定这是否仍然存在问题。