Rcpp 0.7.5

    Published on Romain Francois, Professional R Enthusiast: Rcpp 0.7.5 ·
    Retrieved on February 9, 2010

    Dirk released Rcpp 0.7.5 yesterday

    The main thing is the smarter wrap function that now uses techniques of type traits and template meta-programming to have a compile time guess at whether an object is wrappable, and how to do it. Currently wrappable types are :

    • primitive types : int, double, Rbyte, Rcomplex
    • std::string
    • STL containers such as std::vector<T> as long as T is wrappable. This is not strictly tied to the STL, actually any type that has a nested type called iterator and member functions begin() and end() will do
    • STL maps keyed by strings such as std::map<std::string,T> as long as T is wrappable
    • any class that can be implicitely converted to SEXP
    • any class for which the wrap template is partly or fully specialized. (The next version of RInside has an example of that)

    Here comes an example (from our unit tests) :

            funx <- cfunction(signature(), 
            '
            std::map< std::string,std::vector<int> > m ;
            std::vector<int> b ; b.push_back(1) ; b.push_back(2) ; m["b"] = b ;
            std::vector<int> a ; a.push_back(1) ; a.push_back(2) ; a.push_back(2) ; m["a"] = a ;
            std::vector<int> c ; c.push_back(1) ; c.push_back(2) ; c.push_back(2) ; c.push_back(2) ; m["c"] = c ;
            return wrap(m) ;
            ', 
            Rcpp=TRUE, verbose=FALSE, includes = "using namespace Rcpp;" )
    
    R> funx()
    $a
    [1] 1 2 2
    
    $b
    [1] 1 2
    
    $c
    [1] 1 2 2 2
    

    Apart from that, other things have changed, here is the relevant section of the NEWS for this release

        o 	wrap has been much improved. wrappable types now are :
        	- primitive types : int, double, Rbyte, Rcomplex, float, bool
        	- std::string
        	- STL containers which have iterators over wrappable types:
        	  (e.g. std::vector, std::deque, std::list, etc ...). 
        	- STL maps keyed by std::string, e.g std::map
        	- classes that have implicit conversion to SEXP
        	- classes for which the wrap template if fully or partly specialized
        	This allows composition, so for example this class is wrappable: 
        	std::vector< std::map > (if T is wrappable)
        	
        o 	The range based version of wrap is now exposed at the Rcpp::
        	level with the following interface : 
        	Rcpp::wrap( InputIterator first, InputIterator last )
        	This is dispatched internally to the most appropriate implementation
        	using traits
    
        o	a new namespace Rcpp::traits has been added to host the various
        	type traits used by wrap
    
        o 	The doxygen documentation now shows the examples
    
        o 	A new file inst/THANKS acknowledges the kind help we got from others
    
        o	The RcppSexp has been removed from the library.
        
        o 	The methods RObject::asFoo are deprecated and will be removed
        	in the next version. The alternative is to use as.
    
        o	The method RObject::slot can now be used to get or set the 
        	associated slot. This is one more example of the proxy pattern
        	
        o	Rcpp::VectorBase gains a names() method that allows getting/setting
        	the names of a vector. This is yet another example of the 
        	proxy pattern.
        	
        o	Rcpp::DottedPair gains templated operator<< and operator>> that 
        	allow wrap and push_back or wrap and push_front of an object
        	
        o	Rcpp::DottedPair, Rcpp::Language, Rcpp::Pairlist are less
        	dependent on C++0x features. They gain constructors with up
        	to 5 templated arguments. 5 was choosed arbitrarily and might 
        	be updated upon request.
        	
        o	function calls by the Rcpp::Function class is less dependent
        	on C++0x. It is now possible to call a function with up to 
        	5 templated arguments (candidate for implicit wrap)
        	
        o	added support for 64-bit Windows (thanks to Brian Ripley and Uwe Ligges)
    

    (Follow the link for other posts by romain francois)


    If you wish to comment or finish reading the full article, please visit: "Rcpp 0.7.5"

    Share with Friends