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

Aja*_*hri 5 memory r objectsize

我期望生成大量数据然后捕获它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
Run Code Online (Sandbox Code Playgroud)

ags*_*udy 12

您可以使用以下方法模拟对象并计算用于将其存储为R对象的内存估计object.size:

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
Run Code Online (Sandbox Code Playgroud)

  • 我想重点是要知道_before_创建它的大小. (2认同)