R file.mtime()在Mac OS和Windows 7上的精度非常差 - 代码日志

R file.mtime()在Mac OS和Windows 7上的精度非常差

在Windows 7和Mac OS 10.12.2(使用R 3.3.2)上,看起来file.mtime()严重轮回或截断时间戳。我验证了file.create(“my_file.txt”); print(as.numeric(file.mtime(“my_file.txt”)),digits = 22)在Linux上打印出小数点后的几位数字,但是在Windows 7上的同一个my_file.txt中,过去十进制的所有数字将消失。 Mac OS 10.12.2的行为与Windows 7类似。有没有独立于平台的方式来获取R中的精确文件时间戳?
我认为新的file.info可能是最好的方法。如果R-3.3.3没有带来你所需要的(或者在这个过程中,如果这样做),你可以试图通过利用基本操作系统中可能安装的状态(我还没有测试在Mac上):

as.POSIXct(system2("stat", args = c("-c", "%y", "my_file.txt"), stdout = TRUE))
# [1] "2017-02-15 11:24:13 PST"

这可以在一个功能中进行形式化,它为您提供更多的功能:

my_mtime <- function(filenames, stat = c("modified", "birth", "access", "status"),
                     exe = Sys.which("stat")) {
  if (! nzchar(exe)) stop("'stat' not found")
  stat <- switch(match.arg(stat), birth = "%w", access = "%x", modified = "%y", status = "%z")
  filenames <- Sys.glob(filenames) # expand wildcards, remove missing files
  if (length(filenames)) {
    outs <- setNames(system2(exe, args = c("-c", stat, shQuote(filenames)), stdout = TRUE),
                     nm = filenames)
    as.POSIXct(outs)
  }
}

my_mtime("[bh]*")
#                  b-file.R                  h-file.R 
# "2017-02-14 05:46:34 PST" "2017-02-14 05:46:34 PST"

既然你要求file.mtime,我假设“修改”是最有趣的,但它很容易包含一些其他文件时间戳:

my_mtime("[bh]*", stat="birth")
#                  b-file.R                  h-file.R 
# "2017-02-13 22:04:01 PST" "2017-02-13 22:04:01 PST" 
my_mtime("[bh]*", stat="status")
#                  b-file.R                  h-file.R 
# "2017-02-14 05:46:34 PST" "2017-02-14 05:46:34 PST" 

请注意,缺少分数秒是打印的工件(如您所述),可以解决这个问题:

x <- my_mtime("[bh]*", stat="status")
x
#                  b-file.R                  h-file.R 
# "2017-02-14 05:46:34 PST" "2017-02-14 05:46:34 PST" 
options(digits.secs = 6)
x
#                         b-file.R                         h-file.R 
# "2017-02-14 05:46:34.307046 PST" "2017-02-14 05:46:34.313038 PST" 
class(x)
# [1] "POSIXct" "POSIXt" 

更新:在Mac上测试后,我确认了几件事情(感谢@HongOoi为prod):(1)stat的确是不同的,不支持相同的命令行选项,所以这个脚本需要更新;和(2)this answer建议文件系统甚至不在文件时间存储次秒分辨率。如果你的文件系统类型是HFS,我认为这里可能没有什么可以做的。如果底层文件系统不同,可能会有更好的结果。

的确,Windows不附带stat可执行文件。但是,在/ Program Files / Git / usr / bin / stat.exe下,Git for Windows(有人认为是分析师/ dev工具包中的必要条件)。 (其实我上面的hack是在Windows上编写的,在Ubuntu上测试了第二个。)

底线,不幸的是,根据您的文件系统类型,您可能无法获取MacOS上所需/需要的内容。我无法获得安装的统计数据以给出次秒分辨率(即使有不同的参数),这表明我引用的4年的答案没有改变。

http://stackoverflow.com/questions/42127185/r-file-mtime-extremely-poor-precision-on-mac-os-and-windows-7

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:R file.mtime()在Mac OS和Windows 7上的精度非常差