3

POSIXctオブジェクトの入力ベクトルがあるとします。

times.input <- c(
  as.POSIXct('2013-01-01 00:00:00', tz='GMT'),
  as.POSIXct('2013-01-01 00:00:01', tz='GMT')
)
class(times.input)
# [1] "POSIXct" "POSIXt" 

一部の関数 (roundまたは などtrunc) は次のように変換POSIXctされPOSIXltます。

unique.dates <- unique(trunc(times.input, 'days')))
class(times.rounded)
# [1] "POSIXlt" "POSIXt"

次に、lapplyこのオブジェクトを反復しようとすると、奇妙なことが起こります。

lapply(X=unique.dates, FUN=print)
# [1] 0 0
# [1] 0 0
# [1] 4 4
# [1] 1 1
# [1] 0 0
# [1] 113 113
# [1] 2 2
# [1] 0 0
# [1] 0 0

ベクトルのリストとして内部的に垂直に格納されているようPOSIXltで、各オブジェクトを反復するのではなく、内部構造を反復します。

は内部的に整数として格納されるため、 への変換がPOSIXctこの場合に役立つことはわかっていますが、この解決策は醜いと思います。POSIXct

私の質問は次のとおりです。POSIXlt[2]データ入力が与えられた場合、for ループまたはオブジェクトlapplyに対して実行する方法は?POSIXct

4

1 に答える 1

2

リストで動作する原因が発生lapplyしており、保存については正しいですhelp("DateTimeClasses")

クラス「POSIXlt」はベクトルの名前付きリストです (...)

本当に作業する必要がある場合はPOSIXlt、リストに変換することを提案します。

times.input.L <- split(times.input, seq_along(times.input))
lapply(times.input.L, print)
[1] "2013-01-01 01:00:00 CET"
[1] "2013-01-01 01:00:01 CET"
于 2013-09-23T19:25:57.957 に答える