更新
以下 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