From @|mon@urb@nek @end|ng |rom R-project@org  Mon Jun 17 16:54:15 2019
From: @|mon@urb@nek @end|ng |rom R-project@org (Simon Urbanek)
Date: Mon, 17 Jun 2019 10:54:15 -0400
Subject: [Rd] R C API resize matrix
In-Reply-To: <CAL0QV_NPf1NzMJbscLc3QirJcAfG=Ks9ecXPbykk--kFmT_0fw@mail.gmail.com>
References: <CAL0QV_NPf1NzMJbscLc3QirJcAfG=Ks9ecXPbykk--kFmT_0fw@mail.gmail.com>
Message-ID: <D7E7A385-9A9D-4933-9798-1B19AEC47577@R-project.org>

Matrix is just a vector with the dim attribute. Assuming it is not referenced by anyone, you can set any values to the dim attribute. As for the vector, you can use SET_LENGTH() to shorten it - but I'm not sure how official it is - it was originally designed to work, but there were abuses of TRUELENGTH so not sure where we stand now (shortened vectors used to fool the garbage collector as far as object sizes go). I wouldn't do it unless you're dealing with rally huge matrices.

Cheers,
Simon


> On Jun 14, 2019, at 5:31 PM, Morgan Morgan <morgan.emailbox at gmail.com> wrote:
> 
> Hi,
> 
> Is there a way to resize a matrix defined as follows:
> 
> SEXP a = PROTECT(allocMatrix(INTSXP, 10, 2));
> int *pa  = INTEGER(a)
> 
> To row = 5 and col = 1 or do I have to allocate a second matrix "b" with
> pointer *pb and do a "for" loop to transfer the value of a to b?
> 
> Thank you
> Best regards
> Morgan
> 
> 	[[alternative HTML version deleted]]
> 
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
> 



[Rd] R C API resize matrix
Simon Urbanek