mas - que es mejor gb o mb en internet
¿Cómo convierto rápidamente el elemento de tamaño de file.info() de bytes a KB, MB, GB, etc.? (2)
Espero que ya haya una respuesta para esto en stackoverflow, y simplemente no pude encontrarla.
Resultado deseado: convierta rápidamente el elemento de tamaño de archivo en una llamada file.info()
de bytes a KB, MB, etc. Estoy bien si la salida es i) una cadena de caracteres con el tipo de tamaño deseado, por ejemplo, "96 bytes"
o ii) simplemente una conversión numérica, por ejemplo, de 60963
bytes a 60.963
KB (por Google ).
Repro pasos:
Crea una carpeta para almacenar el archivo:
dir.create("census-app/data")
Descargue el archivo (~ 60KB):
download.file("http://shiny.rstudio.com/tutorial/lesson5/census-app/data/counties.rds", "census-app/data/counties.rds")
Use
file.info()$size
para devolver el tamaño del archivo en bytes:file.info("census-app//data//counties.rds")$size [1] 60963
A partir de ahí, estoy atascado. Me doy cuenta de que puedo realizar algunos análisis y cálculos complicados / manuales para realizar la conversión (consulte Convertir kilobytes, megabytes, etc. a bytes en R ).
Sin embargo, espero poder simplemente usar una función base o algo similar:
format(file.info("census-app//data//counties.rds")$size, units = "KB")
[1] "60963"
# Attempt to return file size in KB simply returns the size in bytes
# NOTE: format(x, units = "KB") works fine when I
# pass it object.size() for an object loaded in R
La función object.size()
realiza este tipo de formato para sus resultados, pero está destinado a indicarle el tamaño del objeto R que le pasa. No está configurado para tomar un valor arbitrario.
Sin embargo, podemos "robar" algo de su lógica de formato. Puedes llamarlo con
utils:::format.object_size(60963, "auto")
# [1] "59.5 Kb"
De esa manera podemos llamar a la función de formato no exportado. Puede abrir las opciones de formato adicionales en la página de ayuda de ?format.object_size
. Tenga en cuenta que utiliza la regla de que 1 Kb = 1024 bytes (no 1000 como en su ejemplo).
Use la función humanReadable () en el paquete gdata. Tiene opciones para informar el tamaño en unidades base 1000 (''SI'') o base 1024 (''IEC''), y también está vectorizado para que pueda procesar un vector completo de tamaños al mismo tiempo.
Por ejemplo:
> humanReadable(c(60810, 124141, 124, 13412513), width=4)
[1] "60.8 kB" "124 kB" "124 B" "13.4 MB"
> humanReadable(c(60810, 124141, 124, 13412513), standard="IEC", width=4)
[1] "59.4 KiB" "121 KiB" "124 B" "12.8 MiB"
Actualmente estoy trabajando para preparar la versión 2.16.0 de gdata, que agrega la capacidad de indicar qué unidad le gustaría usar para informar los tamaños, así como las unidades de estilo "Unix".
> humanReadable(c(60810, 124141, 124, 13412513), standard="SI", units="kB")
[1] " 60.8 kB" " 124.1 kB" " 0.1 kB" "13412.5 kB"
> humanReadable(c(60810, 124141, 124, 13412513), standard="IEC", units="KiB")
[1] " 59.4 KiB" " 121.2 KiB" " 0.1 KiB" "13098.2 KiB"
humanReadable(c(60810, 124141, 124, 13412513), standard="Unix", units="K")
[1] " 59.4 K" " 121.2 K" " 0.1 K" "13098.2 K"
-Greg [mantenedor del paquete gdata]
Actualizar
CRAN ha aceptado la versión 2.16.1 de gdata, que admite standard="Unix"
opciones standard="Unix"
y units=
, y debería estar disponible en un espejo CRAN en breve.