标签:style blog http io ar color sp for on
面对的是这样一个问题,不断读入一行一行数据,append到data frame上,如果用dataframe, rbind() ,可以发现数据大的时候效率明显变低。
原因是 每次bind 都是一次重新整个数据集的重新拷贝
这个链接有人测试了各种方案,似乎给出了最优方案
http://stackoverflow.com/questions/11486369/growing-a-data-frame-in-a-memory-efficient-manner
library(data.table) dt <- data.table(x=rep(0,1000), y=rep(0,1000)) tracemem(dt) for(i in 1:1000) { dt[i,x := runif(1)] dt[i,y := rnorm(1)] }
data table 可以说是必备的r package。
这也是我尝试多种方案后最终采用的办法。
这里有介绍data.table 的具体用法
http://cran.r-project.org/web/packages/data.table/data.table.pdf
有个问题,赋值一行 难道用一定要用 dt[x, 1:100 := list(xx)] 这样?
注意RHS 等号右侧一定要是一个List,不能是vector
另外几个R 的技巧:
system.time( { x <- 1:wb2.userNum cl <- makeCluster(4, outfile=‘sim.log‘) clusterExport(cl, c("set_similarity","printf","wb2.follow2.set", "wb2.userNum")) results <- parLapply(cl, x, para_func_sim) print("results ok") wb2.follow.sim <- do.call(‘rbind‘, results) stopCluster(cl) })
最后,多利用data table 的statistical 和apply系列函数,真的可以事半功倍!
R 语言中 data table 的相关,内存高效的 增量式 data frame
标签:style blog http io ar color sp for on
原文地址:http://www.cnblogs.com/Sorean/p/4157398.html