studio mac instalar formatear desde commander cero r timestamp filemtime

instalar - R file.mtime() precisión extremadamente baja en Mac OS y Windows 7



r project (2)

Puede esperar aproximadamente 2 semanas, en cuyo punto R 3.3.3 resolverá este problema (al menos para Windows). Del archivo NEWS :

(Sólo Windows.) File.info () ahora devuelve las marcas de tiempo del archivo, incluidas las fracciones de segundos; lo ha hecho en otras plataformas desde R 2.14.0. (NB: algunos sistemas de archivos no registran modificaciones y acceden a marcas de tiempo a resolución de segundos).

En Windows 7 y Mac OS 10.12.2 (con R 3.3.2), parece que file.mtime() redondea o trunca severamente la fecha y hora. file.create("my_file.txt"); print(as.numeric(file.mtime("my_file.txt")), digits = 22) que file.create("my_file.txt"); print(as.numeric(file.mtime("my_file.txt")), digits = 22) file.create("my_file.txt"); print(as.numeric(file.mtime("my_file.txt")), digits = 22) imprime varios dígitos más allá del decimal en Linux, pero todo lo que está más allá del decimal desaparece en Windows 7 para el mismo my_file.txt . El comportamiento de Mac OS 10.12.2 es similar al de Windows 7. ¿Existe una forma independiente de la plataforma para obtener marcas de tiempo de archivos precisos en R?


Creo que el nuevo file.info es probablemente la mejor manera de hacerlo. Si R-3.3.3 no ofrece lo que necesita (o en el ínterin, si es así), puede tratar de evitarlo aprovechando el hecho de que es probable que la stat esté instalada en el SO base (no he probado en una Mac):

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

Esto se puede formalizar en una función que hace un skosh más para ti:

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"

Como solicitó file.mtime , file.mtime que "modificado" es lo más interesante para usted, pero es bastante fácil incluir algunas otras marcas de tiempo de archivos:

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"

Ten en cuenta que la falta de segundos fraccionarios es un artefacto de impresión (como dijiste), esto se puede remediar:

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"

Actualización : después de probar en una Mac, confirmé un par de cosas (gracias a @HongOoi para el prod): (1) la stat es realmente diferente, no admite las mismas opciones de línea de comandos, por lo que esta secuencia de comandos necesitaría actualizarse; y (2) esta respuesta sugiere que el sistema de archivos ni siquiera está almacenando una resolución por debajo del segundo en los tiempos del archivo. Si su tipo de sistema de archivos es HFS +, creo que no se puede hacer nada aquí. Si el sistema de archivos subyacente es diferente, es posible que tenga mejores resultados.

Es cierto que Windows no viene con un ejecutable de stat . Sin embargo, Git para Windows (que algunos sostienen que es una necesidad en un analista / dev toolkit) lo hace, en /Program Files/Git/usr/bin/stat.exe . (De hecho, mi hack de arriba fue escrito en Windows, probado en segundo lugar en Ubuntu.)

En pocas palabras, desafortunadamente, es posible que no obtenga lo que quiere / necesita en MacOS, dependiendo de su tipo de sistema de archivos. No pude obtener la stat instalada para dar una resolución de menos de un segundo (incluso con sus diferentes argumentos), sugiriendo que la respuesta de 4 años a la que hice referencia no ha cambiado.