楼主: yyllllll
1211 2

[其他] 求助!R语言中关于无法分配内存为200M的矢量的问题 [推广有奖]

  • 0关注
  • 0粉丝

硕士生

62%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
3.0000
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
5101 点
帖子
79
精华
0
在线时间
84 小时
注册时间
2020-3-31
最后登录
2024-9-11

1论坛币
求助:
问题:代码里中间过程量有些多,大多数使用sapply和lapply进行循环求值存储,但是当运行:

lapply(1:n, function(i) t(x[which(idl==i),,drop=FALSE])%*%x[which(idl==i),,drop=FALSE])

(涉及的量太多了,这里是程序卡主的地方,其中n为样本量,n=140, x是纵向数据协变量矩阵,x形式为

x:      idl      x1       x2    x3       x4     x5       x6          x7       x8       x9     ......    xp
        1     
        1
        1
        2
        2
        2
        2
        3
        3
        3
         .
         .
         .
1,2,3,...表示个体,当p>1000的时候就会出现无法存储适量大小为200M的矢量,这里的t(x[which(idl==i),,drop=FALSE])%*%x[which(idl==i),,drop=FALSE])算出来是一个pXp矩阵)
而且这个量需要在循环中计算

已经尝试过的方法:
(1)使用memery.limit()类的方法,没有用。
(2)其余中间量能使用的都用了稀疏矩阵Matrix()。
(3)使用过library(STORE)包进行存储。
(4)在程序中涉及到的每一步循环中都是用了rm()组合gc()进行及时的清理。
(5)电脑已经是64位,且为8核16G的配置(不考虑换电脑哈)


求助:因为论文需要,这里的p选择不能小于5000,以上方法没有作用,求助有没有别的方法,谢谢啦。
还有一个是可能我这样计算值并且存储的方式太冗余,求助有没有别的处理方式,比如换掉lapply。
谢谢了!


最佳答案

abelus 查看完整内容

lapply或者sapply,其实都是R中自己包装的循环,和自己写for循环基本等价 要么弄服务器这种扩大硬件的路子,变量数量超过5000个,通常N>>p,说明用来做乘法的矩阵就已经很大了,得到的结果最小也是5000*5000的,如果硬算,内存自然要这么多。 要么接受一些近似计算,您提到很多稀疏矩阵,也许可以有一些特殊方法用分块矩阵的玩法来搞。否则的话,就不要用R来搞了。
关键词:无法分配 R语言 function Library lapply 统计学 R语言 数据挖掘与r语言
沙发
abelus 发表于 2022-3-14 18:13:01 |只看作者 |坛友微信交流群
lapply或者sapply,其实都是R中自己包装的循环,和自己写for循环基本等价
要么弄服务器这种扩大硬件的路子,变量数量超过5000个,通常N>>p,说明用来做乘法的矩阵就已经很大了,得到的结果最小也是5000*5000的,如果硬算,内存自然要这么多。
要么接受一些近似计算,您提到很多稀疏矩阵,也许可以有一些特殊方法用分块矩阵的玩法来搞。否则的话,就不要用R来搞了。

使用道具

藤椅
yyllllll 学生认证  发表于 2024-8-11 15:36:20 |只看作者 |坛友微信交流群
abelus 发表于 2022-3-23 14:14
lapply或者sapply,其实都是R中自己包装的循环,和自己写for循环基本等价
要么弄服务器这种扩大硬件的路子 ...
非常感谢!

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加JingGuanBbs
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-11-5 21:54