From mtmorgan at fhcrc.org  Wed Feb  8 04:31:41 2012
From: mtmorgan at fhcrc.org (Martin Morgan)
Date: Tue, 07 Feb 2012 19:31:41 -0800
Subject: [Rd] capture.output() is trying to allocate 17179869182.6 Gb on
 my not so big data.frame
In-Reply-To: <4F31BCED.7040506@fhcrc.org>
References: <4F31BCED.7040506@fhcrc.org>
Message-ID: <4F31EC9D.9020004@fhcrc.org>

On 02/07/2012 04:08 PM, Herv? Pag?s wrote:
> Hi,
>
> This is what I get with recent R devel on a 64-bit Ubuntu laptop:
>
>  > mydf <- data.frame(a=1:2080, b=1001:2040, c=letters, d=LETTERS,
> e=1:1040)
>  > mydf_in_a_character_vector <- capture.output(mydf)
> Error in print.default(m, ..., quote = quote, right = right) :
> cannot allocate memory block of size 17179869182.6 Gb

The error is thrown inside src/main/printarray.c:425

		Rprintf("%*s%s", R_print.gap, "",
			EncodeString(x[i + j * r], w[j], quote, right));

where the array w is the result of an unPROTECTed allocation earlier in 
the function, and a garbage collection triggered in MatrixRowLabel (in 
this case; allocation also occurs in MatrixColLabel, Rprintf). 
PROTECTion seems to have been implemented in the file assuming that the 
only allocations are at the head of the function; the return in the 
_PRINT_DEAL_c_eq_0 macro makes it difficult to balance the protection 
stack, and R_alloc seems to be a better solution anyway. diff attached.

Martin Morgan

>
> I get something similar with R 2.14.1.
>
> Cheers,
> H.
>
>  > sessionInfo()
> R Under development (unstable) (2012-01-16 r58124)
> Platform: x86_64-unknown-linux-gnu (64-bit)
>
> locale:
> [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
> [3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8
> [5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8
> [7] LC_PAPER=C LC_NAME=C
> [9] LC_ADDRESS=C LC_TELEPHONE=C
> [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
>
> attached base packages:
> [1] stats graphics grDevices utils datasets methods base
>


-- 
Computational Biology
Fred Hutchinson Cancer Research Center
1100 Fairview Ave. N. PO Box 19024 Seattle, WA 98109

Location: M1-B861
Telephone: 206 667-2793
-------------- next part --------------
A non-text attachment was scrubbed...
Name: printarray.c.diff
Type: text/x-patch
Size: 3445 bytes
Desc: not available
URL: <https://stat.ethz.ch/pipermail/r-devel/attachments/20120207/aa4d0042/attachment.bin>


[Rd] capture.output() is trying to allocate 17179869182.6 Gb on my not so big data.frame
Martin Morgan