2015-06-01 47 views
0

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

谢谢!

+0

你问的是存储在硬盘上的文件大小还是加载到R时需要的大小? – Dason

+0

我需要存储在硬盘上的大小。这是区别吗? –

+1

据我所知 - 是的,这就是区别。请注意,如果您将路径传递给object.size作为字符串,那么它告诉您的是该字符串在R中占用了多少内存。 – Dason

回答

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.frame占据比所述matrix更多的内存,即使它们是从相同的基础数据构成;并且这两个占用的空间比磁盘上的文件本身更多。

相关问题