gpt4 book ai didi

r - R file.mtime()在Mac OS和Windows 7上的精度极差

转载 作者:行者123 更新时间:2023-12-03 14:18:55 26 4
gpt4 key购买 nike

在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上可以打印出小数点后几位的数字,但是对于同一my_file.txt,在Windows 7上所有小数点后的内容都将消失。 Mac OS 10.12.2的行为与Windows 7相似。是否存在与平台无关的方法来在R中获取精确的文件时间戳?

最佳答案

我认为新的file.info可能是最好的选择。如果R-3.3.3不能满足您的需求(或者在过渡期间,如果可能),您可以尝试利用基本操作系统中可能安装的stat来避开它(我有在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的产品):(1) stat确实有所不同,不支持相同的命令行选项,因此此脚本需要更新; (2) this answer表示文件系统甚至没有在文件时间上存储亚秒级分辨率。如果您的文件系统类型为HFS +,我认为这里可能无事可做。如果基础文件系统不同,则可能会有更好的结果。

Windows确实没有提供 stat可执行文件。但是,在 /Program Files/Git/usr/bin/stat.exe下, Git for Windows(有些人认为这是分析师/开发工具包中的必要性)。 (实际上,我上面的文章是在Windows上编写的,在Ubuntu上进行了第二次测试。)

遗憾的是,根据文件系统类型的不同,您可能无法在MacOS上获得所需的东西。我无法获得已安装的 stat给出亚秒级的分辨率(即使使用不同的参数),这表明我引用的4岁答案没有更改。

关于r - R file.mtime()在Mac OS和Windows 7上的精度极差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42127185/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com