Skip to content
Back to formatted view

Raw Message

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.