在 write.csv 之后预测文件大小

Posted

技术标签:

【中文标题】在 write.csv 之后预测文件大小【英文标题】:Predicting file size after write.csv 【发布时间】:2013-05-30 23:18:03 【问题描述】:

R 中是否有一种方法(可能近似)估计 write.csv 文件(或其他导出命令,例如 dev.copy2pdf)的文件大小?

【问题讨论】:

【参考方案1】:

我还没有听说过这样的事情,但至少有一个估计 csv 大小的想法。

csvSizeEst <- function(obj, frac=0.01) 
    tf <- tempfile()
    on.exit(unlink(tf))
    n <- ceiling(nrow(obj) * frac)
    write.csv(obj[seq_len(n),], file=tf)
    1/frac * file.info(tf)$size


x <- data.frame(replicate(5, rnorm(500)))

## Estimated file size, based on a 1% sample (the default sample size)
csvSizeEst(x)
# [1] 50700

## Set fraction of file to 1 to get actual file size
csvSizeEst(x, frac=1)
# [1] 48904

此外,要对 R 中的 data.frame 大小(由 object.size 报告)和写成 .csv 文件时的观察关系有一个数量级的意义,请尝试以下操作。 (作为一个 +/- 代表性样本,我在这里检查了 datasets 包中的所有 data.frames。)

oo <- ls("package:datasets")
dfs <- oo[sapply(oo, function(X) is.data.frame(get(X)))]
r <- sapply(dfs, function(X) 
         X <- get(X)
         csvSizeEst(X,1)/object.size(X)
     )
hist(r, breaks=20, col="lightgrey", xlim=c(0,1.5),
     main="Ratio of size-on-disk to object.size in R")

【讨论】:

因此,如果我理解正确,该命令会创建文件的前 1%,然后将其乘以 100 以获得文件大小。所以这假设文件的行大致均匀分布,还是没有必要假设? (另外,为什么是seq_len(n) 而不是1:n?) 是的,这是假设。它应该完全适用于仅由数字、整数和布尔列组成的 data.frame,并且仅适用于字符向量的概率/统计。至于使用seq_len,这只是我养成的一般编程习惯,但在这里没有任何区别。要查看它确实产生影响的一个案例,试试这个:n &lt;- 0; 1:n; seq_len(n) 哎哟!很高兴了解seq_len

以上是关于在 write.csv 之后预测文件大小的主要内容,如果未能解决你的问题,请参考以下文章

FFMPEG - 在编码后获取精确计算的音频文件大小

有没有一种方法可以预测 .doc 的大小?

如何在 pyspark 中使用 df.write.csv 附加到 csv 文件?

CNN模型预测

write.csv 时科学记数法最后一位省略为零

使用 write.csv 时防止将行名写入文件