<div dir="ltr">Hi all,<div>I have a list of lists, the inner lists all of the same lengths. I would like to create a new list  of lists such that ll[[i]][[j]] == tll[[j]][[i]]`,  where the old one is ll and the new one is tll. In R this can be achieved by the function</div>

<div><br></div><div>f = splat(mapply.list)</div><div><br></div><div><div>mapply.list = </div><div>  function(...) mapply(FUN=list, ..., SIMPLIFY = FALSE)</div></div><div><br></div><div>In my application these lists can get pretty long (both inner and outer) so here's my attempt with Rcpp. The empty case is checked in R code, so the outer list is non-empty</div>

<div><br></div><div><div>SEXP t_list(SEXP _ll) {</div><div>  Rcpp::List ll(_ll);</div><div>  Rcpp::List first_col(Rcpp::wrap(ll[0]));  </div><div>  std::vector<std::vector<SEXP> > tll(first_col.size());</div>
<div>
  for(int i = 0; i < ll.size(); i++) {</div><div>    Rcpp::List l(Rcpp::wrap(ll[i]));</div><div>    for(int j = 0; j < l.size(); j++)</div><div>      tll[j].push_back(Rcpp::clone(Rcpp::wrap(l[j])));}</div><div>  std::vector<SEXP> results ;</div>

<div>  for(int i = 0; i < tll.size(); i++) {</div><div>     results.push_back(Rcpp::clone(Rcpp::wrap(tll[i])));}    </div><div>  return(Rcpp::wrap(results));}</div></div><div><br></div><div><br></div><div>It works just fine for a lists of three lists of length 10 or 100, but at 1000 it starts mixing up or skipping elements and it can also crash the interpreter. One set of test lists was created with ll = list(as.list(1:10^n), as.list(rnorm(10^n)), as.list(as.factor(1:10^n))) where n was set to 2, 3  or 4 in different tests. I suppose this code is somehow reusing memory that should  not be reused and when garbage collection happens the errors start, but I don't see how that could happen. Suggestions? Thanks</div>

<div><br></div><div><br></div><div>Antonio</div><div><br></div></div>