作者iamchile ()
看板R_Language
标题Re: [问题] 记忆体不足
时间Sun Jun 23 00:26:57 2013
※ 引述《lianhua (莲华)》之铭言:
: [问题类型]:
: 程式谘询
: [软体熟悉度]:
: 使用者
: [问题叙述]:
: 因为我需要跑大量的贝氏模拟,大回圈次数500次
: 大回圈里面的小回圈20000次
: 每一次小回圈都需要生成一个5XM (M大概100左右) 的矩阵
: 但是我的电脑大回圈大概都跑个200次左右就会跳出
: 错误: 无法配置大小为 526.2 Mb 的向量
: 这种讯息 请问是我的电脑记忆体不足,还是语法太拙劣?
: [程式范例]:
: 程式很长,所以仅贴部分
: N = 500
: L0 = numeric()
: L1 = numeric()
: L2 = numeric()
: Alpha1 = numeric()
: Alpha2 = numeric()
关於numeric()这部分我可以给点小建议,
如果可以的话,还是尽量给定向量长度。
http://statlab.nchc.org.tw/rnotes/?page_id=233
这篇文章看到「尽量避免让 R 自动增加向量长度」这段,
可以很明显看到有给定向量长度及没给定向量长度的差别。
: for(k in 1:N){
: set.seed(k)
: .
: .
: .
: 这里是我怀疑出错的部分,因为如果我不是生成随机矩阵的话
: 就不会有这个问题
: iter = 20000
: repeat{
: ### step 1 fill up Z ###
: g1 = function(x){
: ((l1+l0)*c1*(x^(c1-1)))/((l1+l0)*c1*(x^(c1-1))+l2*c2*(x^(c2-1)))
: }
: g2 = function(x){
: (l1*c1*(x^(c1-1)))/(l1*c1*(x^(c1-1))+(l2+l0)*c2*(x^(c2-1)))
: }
: Z1 = matrix(,ncol=2,nrow=length(t1))
: Z2 = matrix(,ncol=2,nrow=length(t2))
: for(i in 1:length(t1)){
: Z1[i,] = rmultinom(1,1,c(g1(t1[i]),(1-g1(t1[i]))))
: }
: for(i in 1:length(t2)){
: Z2[i,] = rmultinom(1,1,c(g2(t2[i]),(1-g2(t2[i]))))
: }
: }
: 想请各位先进为我解答,感谢~
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.34.27.68