# [R-SIG-Mac] malloc problem R2.6.1 on leopard

Herve Pages hpages at fhcrc.org
Tue Dec 4 21:27:54 CET 2007

```Hi Hans,

In the case you plan to use the result of allsubsets(n) to loop over the
rows of the big returned matrix, then I would rather recommend a more
efficient approach where you don't generate this matrix at all. Something
like this:

nextSubset <- function(subset)
{

i <- which(!subset)[1]
if (is.na(i))
return(NULL)
subset[seq_len(i-1)] <- FALSE
subset[i] <- TRUE
subset
}

subset <- logical(30)
while (TRUE) {
... do something with 'subset' ...
subset <- nextSubset(subset)
if (is.null(subset))
break
}

With an empty loop, I get the following:

> subset <- logical(20)
> system.time(while (1) { subset <- nextSubset(subset); if (is.null(subset)) break })
user  system elapsed
18.241   0.032  18.735

So with n = 30, this would take between 5 and 6 h just to loop over an
empty loop. This is a lot of time but at least you don't generate all
the possible subsets in advance which is just a waste of memory.

Cheers,
H.

Hans Kestler wrote:
> Hi,
> I just installed the latest release (2.6.1) on Leopard (Mac Pro - Quad-Core
> Intel Xeon, 16Gb).
> Calling :
>
> allsubsets <- function (n)
> +   {
> +     if (n > 0)
> +       rbind(cbind(TRUE, Recall(n - 1)), cbind(FALSE, Recall(n -1)))
> +   }
>> a<-allsubsets(30)
>
> I get the following error:
>
> Error: cannot allocate vector of size 1.5 Gb
>
> R(576,0xa04f8f60) malloc: *** mmap(size=1610616832) failed (error code=12)
> *** error: can't allocate region
> *** set a breakpoint in malloc_error_break to debug
> R(576,0xa04f8f60) malloc: *** mmap(size=1610616832) failed (error code=12)
> *** error: can't allocate region
> *** set a breakpoint in malloc_error_break to debug
>
> Any ideas? Thank you.
>
> Hans
>
> 	[[alternative HTML version deleted]]
>
> _______________________________________________
> R-SIG-Mac mailing list
> R-SIG-Mac at stat.math.ethz.ch
> https://stat.ethz.ch/mailman/listinfo/r-sig-mac
>

```