当前位置: 首页>>编程示例 >>用法及示例精选 >>正文


R object.size 报告为对象分配的空间

R语言 object.size 位于 utils 包(package)。

说明

提供用于存储的内存的估计值R对象。

用法

object.size(x)

## S3 method for class 'object_size'
format(x, units = "b", standard = "auto", digits = 1L, ...)
## S3 method for class 'object_size'
print(x, quote = FALSE, units = "b", standard = "auto",
      digits = 1L, ...)

参数

x

一个R对象。

quote

逻辑,指示是否应使用引号打印结果。

units

用于格式化和打印尺寸的单位。不同 standard 的允许值为

standard = "legacy"

"b" , "Kb" , "Mb" , "Gb" , "Tb" , "Pb" , "B" , "KB" , "MB" , "GB" , "TB""PB"

standard = "IEC"

"B" , "KiB" , "MiB" , "GiB" , "TiB" , "PiB" , "EiB" , "ZiB""YiB"

standard = "SI"

"B" , "kB" , "MB" , "GB" , "TB" , "PB" , "EB" , "ZB" , "YB" , "RB""QB"

对于所有标准,units = "auto"也是允许的。如果standard = "auto"、任何 "legacy" 和IEC单位是允许的。有关详细信息,请参阅“格式化和打印对象尺寸”。

standard

要使用的byte-size 单位标准。字符串,可能缩写为 "legacy""IEC""SI""auto" 。有关详细信息,请参阅“格式化和打印对象尺寸”。

digits

小数点后的位数,传递给 round

...

要传递给其他方法或从其他方法传递的参数。

细节

确切地说内存分配的哪些部分应该归属于哪个对象不是clear-cut。此函数仅提供粗略指示:它对于原子向量应该相当准确,但不会检测例如列表的元素是否共享。 (考虑字符向量元素之间的共享,但不考虑单个对象中字符向量之间的共享。)

计算的是对象的大小,不包括在符号表中存储其名称所需的空间。

相关空间(例如,函数的环境以及 EXTPTRSXP 中的指针所指向的内容)不包括在计算中。

64 位构建上的对象大小比 32 位构建上的大,但在具有相同字长和指针大小的不同平台上很可能是相同的。

使用紧凑内部表示的对象的大小可以是over-estimated。

"object_size" 的对象,具有长度为 1 的双精度值,可归因于该对象的内存分配的估计值(以字节为单位)。

格式化和打印对象尺寸

对象大小可以使用 byte-size 单位进行格式化R的遗留标准,IEC标准,或SI标准。如下表所示,传统和IEC标准使用二进制单位(1024 的倍数),而 SI 标准使用十进制单位(1000 的倍数)。

对于方法 formatprint ,参数 standard 指定要使用的标准,参数 units 指定要使用的 byte-size 单元。 units = "auto" 选择结果为 1 或更多的最大单位(四舍五入之前)。字节大小四舍五入到 digits 小数位。如果可能,standard = "auto" 根据 units 选择标准,否则使用旧标准。

的总结R的遗产和IEC单位:

物体大小 legacy IEC
1 1字节1乙
1024 1 KB1 KiB
1024^21兆字节1 MiB
1024^31GB1 GiB
1024^41 TB1 TiB
1024^51 铅1 PiB
1024^6 1 EiB
1024^7 1 ZiB
1024^8 1 YiB

的总结SI单位:

物体大小 SI
1 1乙
1000 1 KB
1000^21MB
1000^31GB
1000^41TB
1000^51PB
1000^61 EB
1000^71ZB
1000^81 元
1000^91 RB
1000^101 个四分卫

例子

object.size(letters)
object.size(ls)
format(object.size(library), units = "auto")

sl <- object.size(rep(letters, 1000))

print(sl)                                    ## 209288 bytes
print(sl, units = "auto")                    ## 204.4 Kb
print(sl, units = "auto", standard = "IEC")  ## 204.4 KiB
print(sl, units = "auto", standard = "SI")   ## 209.3 kB

(fsl <- sapply(c("Kb", "KB", "KiB"),
               function(u) format(sl, units = u)))
stopifnot(identical( ## assert that all three are the same :
             unique(substr(as.vector(fsl), 1,5)),
             format(round(as.vector(sl)/1024, 1))))

## find the 10 largest objects in the base package
z <- sapply(ls("package:base"), function(x)
            object.size(get(x, envir = baseenv())))
if(interactive()) {
as.matrix(rev(sort(z))[1:10])
} else # (more constant over time):
    names(rev(sort(z))[1:10])

作者

R Core; Henrik Bengtsson for the non-legacy standards.

参考

The wikipedia page, https://en.wikipedia.org/wiki/Binary_prefix, is extensive on the different standards, usages and their history.

也可以看看

Memory-limits 用于对象大小的设计限制。

相关用法


注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Report the Space Allocated for an Object。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。