質問

以外の関数を適用したい場合はどうなりますか 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"

ここで何が起こっているのか考えてみませんか? applylength ベクトルの最初の要素を独自のリストとして取っているようです。

役に立ちましたか?

解決

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
> 
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top