【发布时间】:2018-07-19 06:52:18
【问题描述】:
我正在尝试为以 10Hz 的频率(即 0.1 秒的周期)采样的时间序列创建一个序列
以下this post我用过:
> options(digits.secs=4)
然后:
> time.seq = seq(from=as.POSIXlt("00:00:00.0", format="%H:%M:%OS",tz="GMT"), length.out=10, by=0.10)
返回:
> head(time.seq)
[1] "2018-02-08 00:00:00.0 GMT" "2018-02-08 00:00:00.0 GMT"
[3] "2018-02-08 00:00:00.2 GMT" "2018-02-08 00:00:00.2 GMT"
[5] "2018-02-08 00:00:00.4 GMT" "2018-02-08 00:00:00.5 GMT"
这是不对的。 2 应该是:
"2018-02-08 00:00:00.1 GMT"
和[4]
"2018-02-08 00:00:00.3 GMT"
最初我认为问题出在格式化或 getOption 上,但似乎并非如此,因为如果我使用不同的分数,它可以完美地工作:
> time.seq = seq(from=as.POSIXlt("00:00:00.0", format="%H:%M:%OS",tz="GMT"), length.out=10, by=0.0315)
> head(time.seq)
[1] "2018-02-08 00:00:00.0000 GMT" "2018-02-08 00:00:00.0315 GMT"
[3] "2018-02-08 00:00:00.0629 GMT" "2018-02-08 00:00:00.0945 GMT"
[5] "2018-02-08 00:00:00.1259 GMT" "2018-02-08 00:00:00.1575 GMT"
所以这意味着存在一些舍入误差。
请问有人知道如何解决这个问题吗?我在 OS X (High Sierra) 上使用 R 3.4.1
谢谢!
更新 从this post 可以看出,加法中有一个浮点错误。使用 Matthew Lundberg 的帖子中的“表单”格式化功能,我得到:
f4 <- "%Y-%m-%d %H:%M:%OS4"
> time.seq = seq(from=as.POSIXlt("00:00:00.0", format="%H:%M:%OS",tz="GMT"), length.out=10, by=0.10)
> format(time.seq[1], f4)
[1] "2018-02-09 00:00:00.0000"
> format(time.seq[2], f4)
[1] "2018-02-09 00:00:00.0999"
> format(time.seq[3], f4)
[1] "2018-02-09 00:00:00.2000"
这大概意味着由于某种原因,R 中的格式没有选择我的选项设置:
> options(digits.secs=4)
【问题讨论】:
-
计算机并不像您想象的那样擅长添加小数。问题基本相同:stackoverflow.com/questions/9508518/…