yukuang
碰到一个大大的矩阵运算,时间和空间复杂度都是平方。使用普通的R函数解决,碰到问题:
1、普先碰到了烦人的cannot allocate vector of size 595.8Mb。我的内存是4G,也运行了memory.limit(4000),为何到了595.8Mb就不让用了?
2、听说ff或bigmemory可以解决内存问题,在winxp下尝试了一下ff,但是用了ff很多现成的R函数就不能用了,听说是必须使用ff版的R函数才行。
3、那就牺牲时间换空间吧,总比新买些内存强啊。用了for循环较慢,又听说apply在效率上和for差不多(没试过),被老板批效率太低。
4、又试了下Rcpp,ff,C++,Eigen,boost等的组合,发现太痛苦了,程序逻辑倒不算复杂,多种语言(库)的糅合,最痛苦的就是数据类型(数据结构)的转换让人眼花。
高手们能否给兄弟指条路,到底用哪种语言或技术才能获得时间和空间都略加满意的结果,非得把兄弟往map/reduce上逼吗?
zjgslxh
[未知用户]
其实有时候我也遇见过cannot allocate vector of size 595.8Mb这种类型的错误,而我的电脑是2G的内存(32位)。或许背后是因为真正分配给R的内存不是2G。等待以后有时间换64位的操作系统试一试。
Rcpp这个包博大精深,我一直在学习,不过我的每次使用虽然折腾,但是最后的结果(速度的提升)确实让我觉着值得折腾。
有时候看http://www.rdocumentation.org/里面的Top Ranked CRAN PackagesRcpp一直是前几位,这或许说明······。
以上基本废话,期待大神来回答。
enthumelon
1. 换64位Linux最简单。否则32位Win系统什么的很麻烦,而且08年后的笔记本应该没有32的CPU吧?虽然有32位系统...
2. 你的矩阵大约 > 10000*10000 (~600MB)的?如果稀疏,可以用稀疏矩阵相关的包,否则没有太好的办法。用C什么的,你计算下double矩阵放不放得到内存里也是问题。
3. 多用点gc()什么的,虽然手动调用不是很推荐。
4. RcppEigen什么的可以模板直接转换,不麻烦吧,但是和ff一起用就算了。
Windows R 启动时有如下选项, 你组合下吧...
[quote]
--max-mem-size=N Set limit for memory to be used by R
--max-ppsize=N Set max size of protect stack to N
[/quote]
Thirdwing
要不你等我们暑假后发布新工具吧,R里做machine learning的话,内存不再是问题
superdesolator
[未知用户]
使用RRE,商业版免费个人版的R语言,里面的读取数据是通过硬盘,不用大数据的时候,完全就是普通的R,用大数据的时候,就用RevoScaleR,它里面实现了一些基本的算法,例如决策树,GLM,KMEANS等,但如果你要用更多的函数,那就得自己按着规则写了
yukuang
[未知用户]
感谢大神
yukuang
[未知用户]
看了看RRE,是个好东东。就怕资料少,用户少,碰到问题不好找。