[R] Memory not release when an environment is created
luke-tierney at uiowa.edu
luke-tierney at uiowa.edu
Thu Sep 22 21:24:21 CEST 2016
On Thu, 22 Sep 2016, luke-tierney at uiowa.edu wrote:
> My preference is to use a top level function in the package or global
> env that takes as arguments just the variables I want in the parent
> frame. That avoids the explicit environment manipulations. Here that
> would be
>
>> makeFunc0 <- function(xmin, xmax)
> function(y) (y - xmin) / (xmax - xmin)
>
But I do keep forgetting the need to force the parameters if you don't
want a big value to stick around until the returned function is used
the first time, so a better definition of makeFUnc0 is
makeFunc0 <- function(xmin, xmax) {
force(xmin)
force(xmax)
function(y) (y - xmin) / (xmax - xmin)
}
Best,
luke
>> makeFunc1 <- function(x)
> makeFunc0(min(x), max(x))
>
>> f <- makeFunc1(1:1e8)
>> ls.str(all=TRUE, environment(f))
> xmax : int 100000000
> xmin : int 1
>> parent.env(environment(f))
> <environment: R_GlobalEnv>
>> f(c(1234567, 2345678))
> [1] 0.01234566 0.02345677
>
> Best,
>
> luke
>
>
> On Thu, 22 Sep 2016, William Dunlap via R-help wrote:
>
>> I like to have my function-returning functions use new.env(parent=XXX)
>> to make an environment for the returned function and put into it only
>> the objects needed by the function. The 'XXX' should be a an environment
>> which will hang around anyway. It could be globalenv(), but if your
>> function
>> is in a package, as.environment(paste0("package:", .packageName))
>> would work well. The later ensures the your returned function has access
>> to all the other functions in that package.
>>
>> E.g.,
>>> makeFunc1 <- function(x) {
>> envir <- new.env(parent = environment(sys.function()))
>> envir$xmax <- max(x)
>> envir$xmin <- min(x)
>> with(envir, function(y) (y - xmin) / (xmax - xmin))
>> }
>>> f <- makeFunc1(1:1e8)
>>> ls.str(all=TRUE, environment(f))
>> xmax : int 100000000
>> xmin : int 1
>>> parent.env(environment(f))
>> <environment: R_GlobalEnv>
>>> f(c(1234567, 2345678))
>> [1] 0.01234566 0.02345677
>>
>>
>>
>> Bill Dunlap
>> TIBCO Software
>> wdunlap tibco.com
>>
>> On Thu, Sep 22, 2016 at 8:41 AM, Olivier Merle <oliviermerle35 at gmail.com>
>> wrote:
>>
>>> Dear,
>>>
>>> When I use big data for a temporary use it seems that the memory is not
>>> released when a function/environement is created nearby.
>>> Here the reproducible exemple:
>>>
>>> test<-function(){
>>> x=matrix(0,50000,10000)
>>> y=function(nb) nb^2
>>> return(y)
>>> }
>>> xx=test() # 3 Go of Ram is used
>>> gc() # Memory is not released !! even if x has been destroyed [look into
>>> software mem used]
>>> format(object.size(xx),units="auto") # 1.4 KiB => R is worng on the size
>>> of
>>> the object
>>> rm(xx)
>>> gc() # Memory is released
>>>
>>> ## Classic
>>> test2<-function(){
>>> x=matrix(0,50000,10000)
>>> y=1
>>> return(y)
>>> }
>>> xx=test2() # Memory is used
>>> gc() # => Memory is released
>>>
>>> How can I release the data in test without destroying the xx object ? As x
>>> which is big object is destroyed, I though I could get my memory back but
>>> it seems that the function y is keeping the x object.
>>>
>>> Best
>>>
>>> [[alternative HTML version deleted]]
>>>
>>> ______________________________________________
>>> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
>>> https://stat.ethz.ch/mailman/listinfo/r-help
>>> PLEASE do read the posting guide http://www.R-project.org/
>>> posting-guide.html
>>> and provide commented, minimal, self-contained, reproducible code.
>>>
>>
>> [[alternative HTML version deleted]]
>>
>> ______________________________________________
>> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
>> https://stat.ethz.ch/mailman/listinfo/r-help
>> PLEASE do read the posting guide
>> http://www.R-project.org/posting-guide.html
>> and provide commented, minimal, self-contained, reproducible code.
>>
>
>
--
Luke Tierney
Ralph E. Wareham Professor of Mathematical Sciences
University of Iowa Phone: 319-335-3386
Department of Statistics and Fax: 319-335-3017
Actuarial Science
241 Schaeffer Hall email: luke-tierney at uiowa.edu
Iowa City, IA 52242 WWW: http://www.stat.uiowa.edu
More information about the R-help
mailing list