我仍在努力更好地了解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
答案 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
可能存在问题,但我不确定这是否仍然存在问题。