[Rcpp-devel] pass an R list as an argument and accessing elements of a list

Dirk Eddelbuettel edd at debian.org
Fri Oct 8 13:32:15 CEST 2010


Hi Vinh,

On 7 October 2010 at 21:41, Vinh Nguyen wrote:
| I'll pass the R list as an SEXP object and then use Rcpp to access that list:
| extern "C" SEXP MyCppFunc(..., SEXP _list){
| ...
| Rcpp::List list(_list) ;
| ...
| }
| 
| Is the above the proper way to pass a list the Rcpp way?  I've

Yes it is. There are working examples in other packages where these
Rcpp::List are used to pass a (large) number of variables.

| used Rcpp::List::create but haven't done passing a list as an
| argument.
| 
| To access the elements of the list, can I access them as list["x"],
| list["y"], and list["z"], just like the Rcpp::NumericVector case?

Absolutely.

| Don't think I saw accessing lists in the vignettes.
| 
| When I pass the Rcpp::List into the optim function, is this the
| correct way to pass it:
| 
| void optim(..., Rcpp::List list){
| ...
| // do stuff with list, such as list["x"].
| ...
| }

You may want to make that a reference:

    void optim(..., Rcpp::List & list){

or a const reference:

    void optim(..., const Rcpp::List & list){

for greater efficiency. [ The const case every now and then reveals a
accessor functions, let us know when you get errors. ]

Cheers, Dirk

-- 
Dirk Eddelbuettel | edd at debian.org | http://dirk.eddelbuettel.com


More information about the Rcpp-devel mailing list