Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
nleqslv内存在R中的使用_R - Fatal编程技术网

nleqslv内存在R中的使用

nleqslv内存在R中的使用,r,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)) } m

我对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()
任何帮助都将不胜感激


AJL还应该提到,我可以在Mac、Windows桌面和Surface Pro上复制这一功能。很好。即使将调用的结果分配给
nleqslv
,删除它然后调用垃圾收集器也不能解决问题。但是,在
model\u test()
完成后调用垃圾收集器会起作用。因此,我不确定
nleqslv
本身就是问题所在。R因其对内存的自由使用而臭名昭著。如果您选中
memory.profile()
,您会注意到它正在保留内存。内存本身没有被填满。在运行
gc()
之前,实际使用了大约770Mb,剩下的2.4GB只是保留的。这通常是您应该邮寄给维护人员的。我怀疑
nleqslv
是罪魁祸首。fortran代码不分配内存。封装的C代码确实如此,并且在释放内存时非常小心。我将尝试找出是否应该归咎于
nleqslv
,以及是否必须改变某些事情。@Joris Meys:AndrewLeach已经联系过我,我用一个小例子重现了这个问题。我还不能完全确定,但我认为默认的JIT级别会导致这种情况。使用JIT级别0似乎可以解决这个问题。我在等安德鲁的答复。如果它是默认的JIT级别,那么它可能是R中的一个错误。这是可以报告的。@Joris Meys:问题是JIT执行中的一个错误。自R-3.4起,问题已解决。-已修补r72789。
test_iter    lambda   res_ext  reserves    x_test 
       48      1648      1648      1648      3256