如何快速将 file.info() 的大小元素从 bytes 转换为 KB、MB、GB 等?
How do I quickly convert the size element of file.info() from bytes to KB, MB, GB, etc.?
我希望在 Whosebug 上已经有这个问题的答案,但我只是找不到它。
期望的结果: 快速将 file.info()
调用中的文件大小元素从字节转换为 KB、MB 等。如果输出是i) 具有所需大小类型的字符串,例如 "96 bytes"
或 ii) 简单的数字转换,例如从 60963
字节到 60.963
KB(每个 Google) .
重现步骤:
创建文件夹存放文件:
dir.create("census-app/data")
下载文件 (~60KB):
download.file("http://shiny.rstudio.com/tutorial/lesson5/census-app/data/counties.rds",
"census-app/data/counties.rds")
使用 file.info()$size
到 return 文件大小(以字节为单位):
file.info("census-app//data//counties.rds")$size
[1] 60963
从那里开始,我被困住了。我意识到我可以做一些 complicated/manual 解析和计算来进行转换(参见 Converting kilobytes, megabytes etc. to bytes in R)。
但是,我希望我可以简单地使用一个基本函数或类似的东西:
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
object.size()
函数对其结果进行这种类型的格式化,但它的目的是告诉您传递给它的 R 对象的大小。它未设置为按值取任意值。
但是,我们可以 "steal" 它的一些格式逻辑。你可以用
调用它
utils:::format.object_size(60963, "auto")
# [1] "59.5 Kb"
这样我们就可以调用未导出的格式化函数了。您可以在 ?format.object_size
帮助页面上调出其他格式设置选项。请注意,它使用 1 Kb = 1024 字节(不是您的示例中的 1000)的规则。
使用 gdata 包中的 humanReadable() 函数。它具有以 1000 ('SI') 或 1024 ('IEC') 为单位报告大小的选项,并且它也是矢量化的,因此您可以同时处理整个大小矢量。
例如:
> 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"
我目前正在准备 gdata 2.16.0 版,它增加了指示您想要使用哪个单位来报告大小以及 "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 [gdata 包的维护者]
更新
CRAN 已接受 gdata 版本 2.16.1,它支持 standard="Unix"
和 units=
选项,并且应该很快可以在 CRAN 镜像上使用。
我希望在 Whosebug 上已经有这个问题的答案,但我只是找不到它。
期望的结果: 快速将 file.info()
调用中的文件大小元素从字节转换为 KB、MB 等。如果输出是i) 具有所需大小类型的字符串,例如 "96 bytes"
或 ii) 简单的数字转换,例如从 60963
字节到 60.963
KB(每个 Google) .
重现步骤:
创建文件夹存放文件:
dir.create("census-app/data")
下载文件 (~60KB):
download.file("http://shiny.rstudio.com/tutorial/lesson5/census-app/data/counties.rds", "census-app/data/counties.rds")
使用
file.info()$size
到 return 文件大小(以字节为单位):file.info("census-app//data//counties.rds")$size [1] 60963
从那里开始,我被困住了。我意识到我可以做一些 complicated/manual 解析和计算来进行转换(参见 Converting kilobytes, megabytes etc. to bytes in R)。
但是,我希望我可以简单地使用一个基本函数或类似的东西:
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
object.size()
函数对其结果进行这种类型的格式化,但它的目的是告诉您传递给它的 R 对象的大小。它未设置为按值取任意值。
但是,我们可以 "steal" 它的一些格式逻辑。你可以用
调用它utils:::format.object_size(60963, "auto")
# [1] "59.5 Kb"
这样我们就可以调用未导出的格式化函数了。您可以在 ?format.object_size
帮助页面上调出其他格式设置选项。请注意,它使用 1 Kb = 1024 字节(不是您的示例中的 1000)的规则。
使用 gdata 包中的 humanReadable() 函数。它具有以 1000 ('SI') 或 1024 ('IEC') 为单位报告大小的选项,并且它也是矢量化的,因此您可以同时处理整个大小矢量。
例如:
> 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"
我目前正在准备 gdata 2.16.0 版,它增加了指示您想要使用哪个单位来报告大小以及 "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 [gdata 包的维护者]
更新
CRAN 已接受 gdata 版本 2.16.1,它支持 standard="Unix"
和 units=
选项,并且应该很快可以在 CRAN 镜像上使用。