R:文件大小。 file.info()$ size和object.size()之间有什么区别?

时间:2015-06-01 16:21:08

标签: r file-handling

我想知道 R 中文件的大小。我应该使用 file.info(pathtodata)$ size 还是 object.size(pathtodata)
 (或其他解决方案?)
它们之间有什么区别?

谢谢!

1 个答案:

答案 0 :(得分:3)

通常object.size()应该大于磁盘上文件的大小,因为R对象将具有与其相关联的元数据,占用额外的内存 - 请参阅Hadley's article here。除此之外,不同的对象类将具有不同的内存占用:

write.csv(
  matrix(1:1000),
  file="~/tmp/foo.csv",
  row.names=FALSE)
##
df <- read.csv(
  "~/tmp/foo.csv",
  stringsAsFactors=FALSE)
mat <- as.matrix(df)
##
R> file.info("~/tmp/foo.csv")$size
#[1] 3898
R> object.size(df)
#4672 bytes
R> object.size(mat)
#4464 bytes
R> file.info("~/tmp/foo.csv")$size
#[1] 3898
R> system("stat ~/tmp/foo.csv")
#  File: ‘/home/nr07/tmp/foo.csv’
#  Size: 3898       Blocks: 8          IO Block: 4096   regular file

在上面的例子中,data.frame占用的内存比matrix多,即使它们是从相同的底层数据构建的;并且这两个占用的空间都比文件本身在磁盘上占用的空间大。