3

Zoo オブジェクト (時系列) の各秒の最後のデータを取得する R のサンプル コードを調べていました。コードは機能しますが、次の行がわかりません。

time(tmp) <- as.integer(time(tmp) + 1e-7) + Epoch

時間値に 1e-7 を加算するのはなぜですか? ここに完全なコードを貼り付けます。親切に助けて

library(zoo)
zsec <- structure(1:10, index = structure(c(1234760403.968, 1234760403.969,
            1234760403.969, 1234760405.029, 1234760405.029, 1234760405.03,
            1234760405.03, 1234760405.072, 1234760405.073, 1234760405.073
            ), class = c("POSIXt", "POSIXct"), tzone = ""), class = "zoo")

# tmp is zsec with time discretized into one second bins
tmp <- zsec
st <- start(tmp)
Epoch <- st - as.numeric(st)
time(tmp) <- as.integer(time(tmp) + 1e-7) + Epoch

# find index of last value in each one second interval
ix <- !duplicated(time(tmp), fromLast = TRUE)
4

2 に答える 2

1

何もしないようです。+ 1e-7 項を削除すると、R は同じ構造になると教えてくれます

これは、発生する可能性のある丸め誤差を修正するために使用される丸め用語だと思います。

   library(zoo) 
   zsec <- structure(1:10, index = structure(c(1234760403.968, 1234760403.969,             
                                               1234760403.969, 1234760405.029, 1234760405.029, 1234760405.03,             
                                               1234760405.03, 1234760405.072, 1234760405.073, 1234760405.073             
                                              ), class = c("POSIXt", "POSIXct"), tzone = ""), class = "zoo")  

   # tmp is zsec with time discretized into one second bins 
   tmp <- zsec 
   st <- start(tmp) 
   Epoch <- st - as.numeric(st) 
   time(tmp) <- as.integer(time(tmp) + 1e-7) + Epoch  

   # find index of last value in each one second interval 
   ix <- !duplicated(time(tmp), fromLast = TRUE) 
   time(tmp)[ix]

   tmp2 <- zsec 
   st <- start(tmp2) 
   Epoch <- st - as.numeric(st) 
   time(tmp2) <- as.integer(time(tmp2)) + Epoch 


   iy <- identical(time(tmp), time(tmp2))

iy <-同一(時間(tmp)、時間(tmp2))

[1] 真

同一 ((as.integer(time(tmp) + 9.99999e-1))、as.integer(time(tmp2)))

[1] 真

同一 ((as.integer(time(tmp) + 9.999999e-1))、as.integer(time(tmp2)))

[1] 偽

于 2011-11-25T10:06:55.863 に答える
0

大げさな推測ですが、何かに微量を追加する最も一般的な理由は、ゼロ除算の問題を回避することです。作者が欲しかったのかもしれない

time(tmp) - time(zsec)

ゼロ以外の範囲を指定します。(ただし、違いは非常に小さいため、 TRUE を返すtimeため、違いを破棄しているように見えます。)identical(zsec, tmp)

于 2011-11-25T11:28:35.153 に答える