我现在很少使用虚拟机,而主要是在主机(配置了32G内存,安装的Gentoo Linux)上做分析。我简单构造了一个上 GB 的数据(把我的一个较大的data.frame,用rbind反复自身追加了多遍),读写性能的测试结果如下:
数据大小:
<br />
> object.size(d)<br />
3754805664 bytes<br />
> dim(d)<br />
[1] 72207740 10<br />
</p>
写入RDS文件(用时4分钟):
<br />
> system.time({saveRDS(d, "d.rds")})<br />
user system elapsed<br />
231.359 0.585 239.651<br />
</p>
从RDS文件读取(用时20秒):
<br />
> system.time({d <- readRDS("d.rds")})<br />
user system elapsed<br />
17.913 0.444 18.505<br />
</p>
写入文本文件(用时31分钟):
<br />
> system.time({write.table(d, file = "d.txt")})<br />
user system elapsed<br />
743.340 1118.984 1874.830<br />
</p>
从文本文件读取(用data.table包中的fread,用时不到3分钟):
<br />
> library(data.table)<br />
data.table 1.9.2 For help type: help("data.table")<br />
> system.time({d <- fread("d.txt", header = TRUE, sep = " ")})<br />
Read 72207739 rows and 11 (of 11) columns from 6.078 GB file in 00:02:37<br />
user system elapsed<br />
155.137 1.135 156.157<br />
</p>
从文本文件读取(用普通的read.table,用时12分钟):
<br />
> system.time({d <- read.table("d.txt", header = TRUE, sep = " ")})<br />
user system elapsed<br />
764.791 8.834 773.563<br />
</p>
在系统中查看所读写的两个文件的大小:
<br />
$ ls -sh1 d*<br />
1.1G d.rds<br />
6.1G d.txt<br />
</p>
最后,看一下现在使用的所有变量加起来的占用内存:
<br />
> prettyNum(sum(sapply(ls(), function(var) object.size(get(var)))), big.mark = ",")<br />
[1] "13,052,685,856"<br />
实测关闭 RStudio(保存workspace image) 和重新打开 RStudio(读取workspace image),分别用时9分钟和5分钟。</p>
补充:
<br />
> sessionInfo()<br />
R version 3.1.1 (2014-07-10)<br />
Platform: x86_64-pc-linux-gnu (64-bit)</p>
<p>locale:<br />
[1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C LC_TIME=en_US.utf8 LC_COLLATE=en_US.UTF-8 LC_MONETARY=en_US.utf8<br />
[6] LC_MESSAGES=en_US.UTF-8 LC_PAPER=en_US.utf8 LC_NAME=C LC_ADDRESS=C LC_TELEPHONE=C<br />
[11] LC_MEASUREMENT=en_US.utf8 LC_IDENTIFICATION=C </p>
<p>attached base packages:<br />
[1] stats graphics grDevices utils datasets methods base </p>
<p>other attached packages:<br />
[1] data.table_1.9.2</p>
<p>loaded via a namespace (and not attached):<br />
[1] plyr_1.8.1 Rcpp_0.11.2 reshape2_1.4 stringr_0.6.2 tools_3.1.1<br />
</p>