1

クラスでのマイクロ/ミリ秒の表現/ストレージに関するあいまいさに戸惑っていますPOSIXlt

オブジェクトを印刷するPOSIXltと、それぞれの属性のクエリとして異なるマイクロ/ミリ秒の数字が表示されます(最後の数字は異なります)

これは完全に理にかなっているかもしれませんが、私はそれがちょっと奇妙だと思います。誰かが私にこれを説明できますか?

マイクロ秒

# Change digits for seconds >> microseconds
opts <- options(digits.secs=6)
x <- "2012-07-30 12:10:09.123123"

posix <- as.POSIXlt(x, tz="Europe/Berlin")

> posix
[1] "2012-07-30 12:10:09.123122 Europe/Berlin"

> posix$sec
[1] 9.123123

ミリ秒

posix$sec <- round(posix$sec, 3)

> posix
[1] "2012-07-30 12:10:09.122 Europe/Berlin"

> posix$sec
[1] 9.123

# Undo option change
options(opts)

また、これは実際には明確さを増しません(少なくとも私にとっては;-))

opts <- options(digits.secs=6)
x <- "2012-07-30 12:10:09.123123"
posix <- as.POSIXlt(x, tz="Europe/Berlin")

> posix
[1] "2012-07-30 12:10:09.123122 Europe/Berlin"
> posix$sec
[1] 9.123123

'sec'属性を手動で操作すると、結果が異なるように見えます。ここではまだ体系的なものはわかりませんが、余分な数字を追加すると(できれば、5Aaaronが指摘したように)、望ましい結果が得られるようです。

# Workaround: extra digit
posix$sec <- posix$sec+0.0000005
> posix
[1] "2012-07-30 12:10:09.123123 Europe/Berlin"

posix$sec <- 9.123122
> posix
[1] "2012-07-30 12:10:09.123122 Europe/Berlin"
posix$sec <- posix$sec+0.0000005
> posix
[1] "2012-07-30 12:10:09.123122 Europe/Berlin"

posix$sec <- 9.123124
> posix
[1] "2012-07-30 12:10:09.123124 Europe/Berlin"
posix$sec <- posix$sec+0.0000005
> posix 
[1] "2012-07-30 12:10:09.123124 Europe/Berlin"

posix$sec <- 9.123125
> posix
[1] "2012-07-30 12:10:09.123124 Europe/Berlin"
posix$sec <- posix$sec+0.0000005
> posix
[1] "2012-07-30 12:10:09.123125 Europe/Berlin"

posix$sec <- 9.123126
> posix
[1] "2012-07-30 12:10:09.123125 Europe/Berlin"
posix$sec <- posix$sec+0.0000005
> posix
[1] "2012-07-30 12:10:09.123126 Europe/Berlin"

options(opts)

セッション情報

R version 2.14.1 (2011-12-22)
Platform: i386-pc-mingw32/i386 (32-bit)

locale:
[1] LC_COLLATE=German_Germany.1252  LC_CTYPE=German_Germany.1252   
[3] LC_MONETARY=German_Germany.1252 LC_NUMERIC=C                   
[5] LC_TIME=German_Germany.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

編集2012-07-31

アーロンのおかげで、左側の次の桁に丸めるために内部で使用される余分な桁を追加するだけで、うまくいく回避策を見つけたと思います。

4

1 に答える 1

3

これは、Rが時間の表示のために切り捨てられるためです(ストップウォッチと同じように)。したがって、時間オブジェクト全体を印刷する場合は、切り捨てられます。ただし、その一部だけを印刷する場合は、時間オブジェクトではなくなるため、標準の丸めが適用されます。

浮動小数点表現は、数値が0.39999999999(または同等の2進数)として表されているかのように、これをさらに明確にします。浮動小数点の許容範囲内では0.4に等しい場合でも、0.3として表示されます。

通常の丸め動作を取得するには、表示する前に0.0005(小数点以下第3位を取得)を追加します。

詳細については、RがPOSIXctを小数秒でフォーマットする方法を参照してください。

于 2012-07-30T18:11:10.607 に答える