有没有办法根据行、列和变量类型来猜测 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))
我期望生成大量数据然后捕获它 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
:
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))