有没有办法根据行、列和变量类型来猜测 data.frame 的大小?

Is there a way to guess the size of data.frame based on rows, columns and variable types?

我期望生成大量数据然后捕获它 R。我如何通过行数、列数和变量来估计 data.frame 的大小(以及因此需要的内存)类型?

示例。

如果我有 10000 行和 150 列,其中 120 列是数字,20 列是字符串,10 列是因子水平,我可以期望数据框的大小是多少?结果是否会根据列中存储的数据而变化(如 max(nchar(column)))?

> m <- matrix(1,nrow=1e5,ncol=150)
> m <- as.data.frame(m)
> object.size(m)
120009920 bytes
> a=object.size(m)/(nrow(m)*ncol(m))
> a
8.00066133333333 bytes
> m[,1:150] <- sapply(m[,1:150],as.character)
> b=object.size(m)/(nrow(m)*ncol(m))
> b
4.00098133333333 bytes
> m[,1:150] <- sapply(m[,1:150],as.factor)
> c=object.size(m)/(nrow(m)*ncol(m))
> c
4.00098133333333 bytes
> m <- matrix("ajayajay",nrow=1e5,ncol=150)
> 
> m <- as.data.frame(m)
> object.size(m)
60047120 bytes
> d=object.size(m)/(nrow(m)*ncol(m))
> d
4.00314133333333 bytes

您可以模拟一个对象并使用 object.size:

计算用于将其存储为 R 对象的内存估计值
m <- matrix(1,nrow=1e5,ncol=150)
m <- as.data.frame(m)
m[,1:20] <- sapply(m[,1:20],as.character)
m[,29:30] <- sapply(m[,29:30],as.factor)
object.size(m)
120017224 bytes
print(object.size(m),units="Gb")
0.1 Gb

您可以创建虚拟变量来存储您将存储在数据框中的数据示例。

然后使用object.size()求出它们的大小并相应地乘以行和列。

同时查看 pryr 包。它有 object_size ,这对你来说可能稍微好一点。来自 advanced R

This function is better than the built-in object.size() because it accounts for shared elements within an object and includes the size of environments.

您还需要考虑 attributes 的大小以及列类型等。

object.size(attributes(m))