我需要使用read.table
从 csv(逗号分隔值)读取的一些数据库,并且我想知道如何计算每种类型变量的分配内存的大小。
怎么做 ?
编辑 - 换句话说:从.csv
文件中读取的一般数据帧 R 分配了多少内存?
我需要使用read.table
从 csv(逗号分隔值)读取的一些数据库,并且我想知道如何计算每种类型变量的分配内存的大小。
怎么做 ?
编辑 - 换句话说:从.csv
文件中读取的一般数据帧 R 分配了多少内存?
您可以使用 获取分配给对象的内存量object.size
。例如:
x = 1:1000
object.size(x)
# 4040 bytes
该脚本也可能会有所帮助——它可以让您查看或绘制所有当前对象使用的内存量。
在回答你为什么object.size(4)
是 48 字节的问题时,原因是每个数字向量都有一些开销。(在R
中,数字4
不仅仅是其他语言中的整数 - 它是长度为 1 的数字向量)。但这不会影响性能,因为开销不会随着向量的大小而增加。如果你试试:
> object.size(1:100000) / 100000
4.0004 bytes
这表明每个整数本身只需要 4 个字节(如您所料)。
因此,总结:
对于长度为 的数值向量,n
通常以字节为单位的大小为40 + 8 * floor(n / 2)
。但是,在我的 R 和 OS 版本上,有一个轻微的不连续性,它比您预期的快 168 字节(见下图)。除此之外,线性关系仍然成立,即使是长度为 10000000 的向量。
plot(sapply(1:50, function(n) object.size(1:n)))
对于分类变量,您可以看到非常相似的线性趋势,尽管开销更大(见下文)。除了一些轻微的不连续性之外,这种关系非常接近400 + 60 * n
。
plot(sapply(1:100, function(n) object.size(factor(1:n))))