Skip to content

reducing a too-large matrix obtained with allocMatrix()

2 messages · Steven Dirkse, Simon Urbanek

#
Hello,

I have some C code (for a shared lib called via .External)  that uses

PROTECT(w= allocMatrix(REALSXP, m, n));

mostly successfully.  In rare cases, though, the row count m will be
an overestimate.  Is there a way to reallocate the matrix in-place,
something like

reAllocMatrix (w,m-excess,n)    /* where excess is > 0 */

to chop off the last excess rows of w?  I only find out about the
excess rows during the single pass over the data made to copy it from
its source to w.

Short of this, all I know to do is allocate a matrix of the proper
size and copy the values.  Any other ways to do this?
#
On Nov 1, 2011, at 4:29 PM, Steven Dirkse wrote:

            
No.

In theory you could use SETLENGTH, and then adjust the dimensions, but since you are talking about rows you'll need to re-arrange the whole matrix anyway so you would a) waste  memory in the result and b) still need to essentially copy in place in an additional pass.

Cheers,
Simon