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
> 

UTC/GMT への POSIX 参照。あなたの例では、5時間進んでいるようです。これは内部的に出力の問題であり、それらは同じ時間に表示されます。これ以上のコメントは難しいです。実行しているOSによって異なります。ロケール設定などの影響を受ける可能性があります。

また、 as.POSIXct は予期しないタイムゾーンを提供し、おそらく問題があることを示唆してas.POSIXct.dateいますが、これがまだ問題であるかどうかはわかりません。

于 2012-07-17T18:36:45.173 に答える