2

formatPOSIXct オブジェクトのリスト以外の関数を適用したい場合はどうすればよいでしょうか? たとえば、時間のベクトルを取得し、それらの時間を 1 時間に切り捨て、それらの時間のそれぞれに任意の関数を適用するとします。

> obs.times=as.POSIXct(c('2010-01-02 12:37:45','2010-01-02 08:45:45','2010-01-09 14:45:53'))
> obs.truncated=trunc(obs.times, units="hours")
> obs.truncated
[1] "2010-01-02 12:00:00 EST" "2010-01-02 08:00:00 EST"
[3] "2010-01-09 14:00:00 EST"

さて、私は の長さobs.truncatedが 3 になると予想しますが、

> length(obs.truncated)
[1] 9

applyしたがって、このベクトルに対して関数を実行しようとしてもうまくいかないことがわかります。のクラスobs.truncated

> class(obs.truncated)
[1] "POSIXt"  "POSIXlt"

ここで何が起こっているのか分かりますか? ベクトルの最初の要素を独自のリストとして取っているように見えますapplylength

4

1 に答える 1

1

このlength()ような POSIXlt の は以前は 9 と報告されていましたが、最近修正されました。

また、私がtrunc(obs.times)間違ったことtrunc()をすると、3 つの要素の文字列に対して 1 回だけ動作します。あなたはapply()等を必要とします。

sapply()したがって、コンポーネントごとのリセットで使用する例を次に示します。

> sapply(obs.times, function(.) {
+ p <- as.POSIXlt(.); 
+ p$min <- p$sec <- 0; 
+ format(p) })
[1] "2010-01-02 12:00:00" "2010-01-02 08:00:00" "2010-01-09 14:00:00"
> 

一方

> trunc(obs.times, units="hours")
[1] "2010-01-02 12:00:00 CST" "2010-01-02 08:00:00 CST"
[3] "2010-01-09 14:00:00 CST"
> class(trunc(obs.times, units="hours"))
[1] "POSIXt"  "POSIXlt"
> length(trunc(obs.times, units="hours"))
[1] 1
> 
于 2010-07-06T20:05:54.637 に答える