[Rcpp-devel] Rcpp sugar preserving attributes

Søren Højsgaard sorenh at math.aau.dk
Sun Jan 4 22:27:55 CET 2015


Hi Dirk,

Cunning piece of code you pointed me to ('ag' seems like a good friend):

#define VECTORIZED_MATH_1(__NAME__,__SYMBOL__)                               \
namespace Rcpp{                                                              \
        template <bool NA, typename T>                                           \
        inline sugar::Vectorized<__SYMBOL__,NA,T>                                \
        __NAME__( const VectorBase<REALSXP,NA,T>& t ){                           \
                return sugar::Vectorized<__SYMBOL__,NA,T>( t ) ;                     \
        }                                                                        \
        inline sugar::Vectorized<__SYMBOL__,true,NumericVector>                  \
        __NAME__( SEXP x){ return __NAME__( NumericVector( x ) ) ; }             \
        template <bool NA, typename T>                                           \
        inline sugar::Vectorized_INTSXP<__SYMBOL__,NA,T>                         \
        __NAME__( const VectorBase<INTSXP,NA,T>& t      ){                           \
                return sugar::Vectorized_INTSXP<__SYMBOL__,NA,T>( t ) ;              \
        }                                                                        \
}

Thanks!
Søren

|-----Original Message-----
|From: Dirk Eddelbuettel [mailto:edd at debian.org]
|Sent: 4. januar 2015 21:51
|To: Søren Højsgaard
|Cc: Dirk Eddelbuettel; rcpp-devel at lists.r-forge.r-project.org
|Subject: RE: [Rcpp-devel] Rcpp sugar preserving attributes
|
|
|On 4 January 2015 at 19:58, Søren Højsgaard wrote:
|| Thanks! Probably a stupid question, but where are these functions
|| defined? In math.h I see
||
|| VECTORIZED_MATH_1(log,::log)
||
|| but - where to look for the implementation?
|
|You mean where VECTORIZED_MATH is defined?
|
|Let me introduce you to my friend 'ag' (with a top of the hat to Kevin
|...)
|
|edd at max:~/git/rcpp/inst/include/Rcpp/sugar(master)$ ag VECTORIZED_MATH
|block/Vectorized_Math.h
|83:#define VECTORIZED_MATH_1(__NAME__,__SYMBOL__)
|\
|
|functions/math.h
|25:VECTORIZED_MATH_1(exp,::exp)
|26:VECTORIZED_MATH_1(acos,::acos)
|27:VECTORIZED_MATH_1(asin,::asin)
|28:VECTORIZED_MATH_1(atan,::atan)
|29:VECTORIZED_MATH_1(ceil,::ceil)
|30:VECTORIZED_MATH_1(ceiling,::ceil)
|31:VECTORIZED_MATH_1(cos,::cos)
|32:VECTORIZED_MATH_1(cosh,::cosh)
|33:VECTORIZED_MATH_1(floor,::floor)
|34:VECTORIZED_MATH_1(log,::log)
|35:VECTORIZED_MATH_1(log10,::log10)
|36:VECTORIZED_MATH_1(sqrt,::sqrt)
|37:VECTORIZED_MATH_1(sin,::sin)
|38:VECTORIZED_MATH_1(sinh,::sinh)
|39:VECTORIZED_MATH_1(tan,::tan)
|40:VECTORIZED_MATH_1(tanh,::tanh)
|42:VECTORIZED_MATH_1(abs,::fabs)
|44:VECTORIZED_MATH_1(gamma      , ::Rf_gammafn     )
|45:VECTORIZED_MATH_1(lgamma     , ::Rf_lgammafn    )
|46:VECTORIZED_MATH_1(digamma    , ::Rf_digamma     )
|47:VECTORIZED_MATH_1(trigamma   , ::Rf_trigamma    )
|48:VECTORIZED_MATH_1(tetragamma , ::Rf_tetragamma  )
|49:VECTORIZED_MATH_1(pentagamma , ::Rf_pentagamma  )
|50:VECTORIZED_MATH_1(expm1      , ::expm1          )
|51:VECTORIZED_MATH_1(log1p      , ::log1p          )
|59:VECTORIZED_MATH_1(factorial  , ::Rcpp::internal::factorial   )
|60:VECTORIZED_MATH_1(lfactorial , ::Rcpp::internal::lfactorial  )
|68:VECTORIZED_MATH_1(trunc, ::Rf_ftrunc)                // truncates to
|zero (cf Writing R Extension, 6.7.3 Numerical Utilities)
|edd at max:~/git/rcpp/inst/include/Rcpp/sugar(master)$
|
|[ ag is "just" a version of 'grep -r' on steroids, which knows to skip
|.git, .svn etc pp -- recommended. In Debian/Ubuntu in package
|silversearcher-ag as there already was a package called ag. ]
|
|Dirk
|
|--
|http://dirk.eddelbuettel.com | @eddelbuettel | edd at debian.org


More information about the Rcpp-devel mailing list