読者です 読者をやめる 読者になる 読者になる

メモ:R 3.4.0でfile.info()がNAを返すやつ

Windowsだけで起こるこのバグのせいでinstall.packages()が失敗するという話があって気になって調べていた。

17261 – file.info returns filetime for directories https://bugs.r-project.org/bugzilla3/show_bug.cgi?id=17261

なんか色々調べてたら、とりあえずそのディレクトリでなにかのプログラムが走っていると(?)、mtimeNAになることがわかった。

dir.create("test")
abs_path <- normalizePath("test")

# これはうまくいく
file.info(abs_path)
#>                                   size isdir mode               mtime               ctime
#> C:\\Users\\user1\\documents\\test    0  TRUE  777 2017-04-30 08:45:59 2017-04-30 08:44:04
#>                                                 atime exe
#> C:\\Users\\user1\\documents\\test 2017-04-30 08:45:59  no

# working directoryをそこに移すとうまくいかない
# (R以外の別のプログラムをそこで立ち上げても同じっぽい)
setwd(abs_path)
file.info(abs_path)
#>                                   size isdir mode mtime ctime atime exe
#> C:\\Users\\user1\\documents\\test    0  TRUE  777  <NA>  <NA>  <NA>  no

実際、この件を修正したコミットに、

Now file timestamps can be obtained even when file is in use.
(Use more robust options in CreateFileW in do_fileinfo (Windows only). · wch/r-source@2ecaaef · GitHub)

と書かれているので、ファイルが使用中だとだめっぽい。とはいえ、なぜこれが起こるのかは謎だし、回避方法なんかあるのかな…。詳しい人教えてください。

ちなみに、このバグを踏んでしまうけどどうしてもR 3.4.0の機能を使いたい、という人は↓から開発版のRをインストールするといいらしいけど、まあ安定版ではないわけであんまりオススメはしません。

https://cran.r-project.org/bin/windows/base/R-3.4.0patched-win.exe