質問
以外の関数を適用したい場合はどうなりますか format
posixctオブジェクトのリストに?たとえば、私は時間のベクトルを取り、それらの時間を時間に切り捨て、それぞれの時間に任意の関数を適用したいとします。
> 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"
ここで何が起こっているのか考えてみませんか? apply
と length
ベクトルの最初の要素を独自のリストとして取っているようです。
解決
length()
そのようなposixltは以前は9つとして報告されていましたが、最近修正されました。
また、私がするとき trunc(obs.times)
間違ったことが起こります - trunc()
3つの要素の文字列で1回のみ動作します。あなたは必要です apply()
et al。
したがって、以下は使用の例です 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
>
所属していません StackOverflow