1

更新

以下 bash 命令行似乎表明它不是 R 问题(玩 sleep 看它只会在每秒 0.43 和 0.93 更新)。(所以我改变了问题标签。)

touch tmp.txt;stat tmp.txt;sleep 0.5;touch tmp.txt;stat tmp.txt

但是我看到“修改:2013-06-20 14:28:36.938579054”,而不是“修改:2013-06-20 14:28:36”,这表明我的 linux 内核已编译并配置为纳秒级精度。所以,我仍然有点困惑,为什么它似乎距离纳秒精度还有很长的路要走!


下面的脚本隔离了我在真实脚本中发现的问题。我将数据反复保存到同一个文件中。看来 file.info$mtime 每秒只更新两次。当我使用 0.05s 睡眠时,问题非常明显:file.info在 100 次中不会更新 87 或 88 次。如果我将睡眠时间增加到 0.5s,它会完美运行(坏==0)。如果我将睡眠时间减少到 0.4 秒,它会在 100 次中出错 14 次。

我的问题是:这是一个 R 错误,还是与操作系统有关?还是我做错了什么,或者做出了错误的假设?

我在 Ubuntu 10.04 上使用 R 3.0.1。

顺便说一句,我注意到在运行以下内容时,mtime 总是以 .936 或 .436(或非常接近的值)结束。永远不要在 0.250、0.800 或 0.950 等。

另一个可能有用的数据点:我file.remove每次在调用save. 它没有任何区别。

fname="tmp.rdata"
options(digits.secs = 3)

data=runif(100)
save(list=c("data"),file=fname)
info=file.info(fname)

ix=0;bad=0

while(ix<100){
    Sys.sleep(0.05)
    data=runif(100)
    current=Sys.time()
    save(list=c("data"),file=fname)
    info2=file.info(fname)
    if(info2$mtime<=info$mtime){bad=bad+1;cat("****************\n")}
    print(current);print(rbind(info,info2))
    ix=ix+1;info=info2
    }
cat("bad=",bad,"\n")

这是stat -c "%y" * |sort过去两个月文件的 , 的输出。所以看起来日期可以在第二个的任何地方。然而,对于大约同时保存的文件,它们似乎都具有相同的两个值?!

2013-04-16 14:41:50.331227602
2013-04-19 20:52:50.238225648
2013-04-30 10:34:43.896278930
2013-05-02 08:36:39.360523004
2013-05-02 08:46:07.848039045
2013-05-07 17:10:19.372043866
2013-05-07 19:12:00.369502114
2013-05-07 19:19:11.370293101
2013-05-07 22:14:39.744755951
2013-05-07 22:14:58.242163170
2013-05-24 12:21:06.231306593
2013-06-06 15:14:40.174142594
2013-06-10 11:16:31.958667081
2013-06-10 11:18:29.958090098
2013-06-10 11:34:16.961026520
2013-06-12 10:44:12.825080955
2013-06-14 12:50:49.531729270
2013-06-17 11:05:23.792289000
2013-06-18 11:44:40.347221361
2013-06-19 13:10:46.590013564
2013-06-20 11:52:16.436423344
2013-06-20 11:52:24.437938646
2013-06-20 11:52:24.437938646
2013-06-20 13:17:16.436666359
2013-06-20 13:20:50.928713629
2013-06-20 14:28:36.938579054
4

1 回答 1

3

如果您每秒获得两次更新,那么您实际上做得很好。R-project 参考资料中关于 file.info的第 227 页的摘录:

三个文件时间的含义取决于操作系统和文件系统。在 Windows 本机文件系统上,ctime 是文件创建时间(在大多数类 Unix 文件系统上没有记录的时间)。“文件访问”的含义以及“最后访问时间”取决于系统。

报告的时间精确到秒,在某些系统上可能更多。但是,许多文件系统仅以秒为单位记录时间,而一些(例如 FAT 系统上的修改时间)以 2 秒或更多秒的增量记录

于 2013-06-20T04:45:40.347 回答