R

时间:2017-06-11 17:24:03

标签: r

我在R中通过nleqslv进行迭代时遇到问题,因为求解器似乎不会清理以前迭代中使用的内存。我在一小段代码中隔离了这个问题:

library(nleqslv)

cons_ext_test <- function(x){
rows_x <- length(x)/2
x_1 <- x[1:rows_x]
x_2 <- x[(rows_x+1):(rows_x*2)]
eq1<- x_1-100 
eq2<-x_2*10-40
return(c(eq1,eq2))
}

model_test <- function()
{
reserves<-(c(0:200)/200)^(2)*2000
lambda <- numeric(NROW(reserves))+5
res_ext <- pmin((reserves*.5),5)
x_test <- c(res_ext,lambda)
#print(x_test)
for(test_iter in c(1:1000))
   nleqslv(x_test,cons_ext_test,jacobian=NULL)
i<- sort( sapply(ls(),function(x){object.size(get(x))})) 
print(i[(NROW(i)-5):NROW(i)])
}

model_test()

当我运行1000次迭代时,内存使用量增加到2 GB以上: Activity Monitor Screencap 运行10次迭代时使用的内存少得多,只有92MB: Activity Monitor Screencap 2 运行一次我的使用时间为62Mb,因此内存分配的增长会随着迭代而扩展。

即使经过1000次迭代,R会话使用2 GB以上的内存,也不会列出大型对象。

test_iter    lambda   res_ext  reserves    x_test 
       48      1648      1648      1648      3256 

非常感谢任何帮助。

AJL

0 个答案:

没有答案