[R] Using object.size inside a function
Duncan Murdoch
murdoch at stats.uwo.ca
Tue Apr 13 15:14:41 CEST 2010
On 13/04/2010 8:43 AM, Bos, Roger wrote:
> When I encounter memory errors, I like to see the size of the objects in
> memory, so I modified one of the examples:
>
> z <- sapply(ls(), function(x) object.size(get(x)))
> as.matrix(rev(sort(z))[1:10])
>
> This works fine if I run it as is, but if I try to place it inside a
> function, I get an error (see below). I tried using sort.list and
> unlist, but I couldn't get it to work. I don't understand why the
> commands work by themselves but not in a function. Its probably a
> simple fix, can anyone enlighten me?
>
> Thanks, Roger.
>
> > "mysize" <- function() {
> + z <- sapply(ls(), function(x) object.size(get(x)))
> + as.matrix(rev(sort(z))[1:10])
> + }
>
> > mysize()
> Error in sort.list(z) : 'x' must be atomic for 'sort.list'
> Have you called 'sort' on a list?
> >
At the time you call ls(), you have no local variables, so it returns an
empty list, and z ends up as list(). sort() can't handle that.
I imagine you wanted ls() on the global environment, not on the locals,
so you should write the function as
"mysize" <- function(envir=globalenv()) {
z <- sapply(ls(envir=envir), function(x) object.size(get(x,envir=envir)))
as.matrix(rev(sort(z))[1:10])
}
Duncan Murdoch
More information about the R-help
mailing list