Hi Adrian, On 26 November 2013 at 18:12, Adrian Duşa wrote: | Dear R-devel, | | I am trying to do something similar to dynamic length lists in R, but | at C level. | | In R, that would be rather trivial: | - determine the length of the list | - create the list object | - store the values for each component | - access value components by using "[[" | | At C level, for a single component where I need to store a vector of | length 5, I do: | | int *p_result; | SEXP my_list = PROTECT(allocVector(VECSXP, 1)); | SEXP result = SET_VECTOR_ELT(my_list, 0, allocVector(INTSXP, 5)); | p_result = INTEGER(result); | | | The number "1" (the length of "my_list") is dynamic, however. | Is there a web reference where I could do some further reading on this topic?
If you are open to C++, there is a fair amount of documentation for Rcpp which some of us find easier. Turing-equivalence does of course hold, and all we do here can also be done at the C level given that we use the same 'SEXP foo(SEXP a, SEXP b, ...)' interface -- while hiding most of it. Here is a simple case where we define a creator function on the fly, compile, link and load it and then have it creates lists of length 2 and 4, respectively: R> library(Rcpp) R> cppFunction("List adrian(int n) { return List(n); } ") R> adrian(2) [[1]] NULL [[2]] NULL R> adrian(4) [[1]] NULL [[2]] NULL [[3]] NULL [[4]] NULL R> Hope this helps, Dirk -- Dirk Eddelbuettel | e...@debian.org | http://dirk.eddelbuettel.com ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel