【问题标题】:R: Size of a file. What is the difference between file.info()$size and object.size()?R:文件的大小。 file.info()$size 和 object.size() 有什么区别?
【发布时间】:2015-08-15 04:52:50
【问题描述】:

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

谢谢!

【问题讨论】:

  • 您是询问存储在硬盘上的文件大小还是加载到 R 中时所需的大小?
  • 我需要存储在硬盘上的大小。这有区别吗?
  • 据我所知 - 是的,这就是这里的区别。请注意,如果您将 object.size 的路径作为字符串传递,那么它告诉您的是该字符串在 R 中占用了多少内存。
  • object.size("path/to/data") 是字符串“path/to/data”的大小(120 字节)。

标签: r file-handling


【解决方案1】:

一般而言,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.framematrix 占用更多的内存,即使它们是从相同的底层数据构造的;并且它们都比文件本身在磁盘上占用的空间更多。

【讨论】:

    猜你喜欢
    • 2013-10-04
    • 1970-01-01
    • 1970-01-01
    • 2021-09-17
    • 2018-10-23
    • 2017-11-08
    • 1970-01-01
    • 1970-01-01
    • 2016-10-24
    相关资源
    最近更新 更多