Le 17/04/13 15:54, Dominique Belhachemi a écrit :
Hi everyone,

I am porting some code from the old API to the new API like in the
following example.

-      SEXP ret = R_NilValue;
-      RcppResultSet rs;
-      rs.add("foo1", bar1);
-      rs.add("foo2", bar2);
-      ret = rs.getReturnList();

+     SEXP ret = R_NilValue;
+     ret = Rcpp::List::create(Rcpp::Named("foo1")  = bar1
+                                       Rcpp::Named("foo2")  = bar2);

This works well if I have less than 20 elements.

But how can I add new elements to the list, including assigning names ?
Is there an alternative way to create the list without using
Rcpp::List::create ?


Thanks

-Dominique

We don't have List::create above 20 elements. You can have a look at how it is done for up to 20 and reproduce it locally.


You can do something like this "manually"

List out(25) ;
CharacterVector names(25) ;
for( int i=0; i<25; i++){
        out[i] = ... ;
        names[i] = ... ;
}
out.attr("names") = names ;


You can use a std::map<string,SomeType> if you deal with homogeneous types:

std::map<string,SomeType> map ;
map["foo"] = bar1 ;
map["foo2"] = bar2 ;
wrap( map ) ;


Or perhaps:

std::map<string,RObject> map ;
map["foo"] = wrap( bar1 ) ;
map["foo2"] = wrap( bar2 ) ;
wrap( map ) ;

Or perhaps even :

std::map<string,SEXP> map ;
map["foo"] = wrap( bar1 ) ;
map["foo2"] = wrap( bar2 ) ;
wrap( map ) ;

Romain

--
Romain Francois
Professional R Enthusiast
+33(0) 6 28 91 30 30

R Graph Gallery: http://gallery.r-enthusiasts.com

blog:            http://blog.r-enthusiasts.com
|- http://bit.ly/Zs97qg  : highlight 0.4.1
`- http://bit.ly/10X94UM : Mobile version of the graph gallery

_______________________________________________
Rcpp-devel mailing list
[email protected]
https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel

Reply via email to