Message-ID: <007807BC54BAE24A9927131307AE18B2044DC37A@US1012EXMP.america.apci.com>
Date: 2011-06-08T14:59:55Z
From: Silkworth,David J.
Subject: [Rcpp-devel] redimension help-my_chosen_solution
In-Reply-To: <BANLkTinVTmURwteRrxmXg4y263k7ftFcYg@mail.gmail.com>
Thanks for all who got involved in my folly.
I have chosen the following path for now.
src <- '
int s = 7; // result of original oversize estimate before process runs
int c=3; //known column count established from a list argument (variable to function)
Rcpp::IntegerVector v(s);
Rcpp::IntegerMatrix m(s,c);
int r = 4; // number of rows that more complex process found necessary to fill
for(int x=1; x<r+1;x++) { v[x-1]=x; } // just partial fill as process would
for(int j=0; j<r;j++) { for(int i=0;i<r;i++) {m(i,j)= (i+1)*(j+1);} }
Rcpp::DataFrame DF =
Rcpp::DataFrame::create(Rcpp::Named("v")=v,
Rcpp::Named("m")=m);
Rcpp::IntegerVector my_r(1);
my_r[0]=r;
Rcpp::List L=Rcpp::List::create(DF,my_r);
return L;
'
fun <- cxxfunction(signature(),src, plugin = "Rcpp")
fun_test<-fun()
RcppDF<-fun_test[[1]]
r<-fun_test[[2]]
RcppDF<-RcppDF[1:r,]
That is, just send it all back to R in a dataframe and let R do the clean-up.
I'm not certain how this will perform when r>120000. This operation is only performed once though. I also intend to develop a better estimate for s than, say 160000.