[Rcpp-devel] redimension help-my_chosen_solution

Silkworth,David J. SILKWODJ at airproducts.com
Wed Jun 8 16:59:55 CEST 2011


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.


More information about the Rcpp-devel mailing list