C++関数はC++ファイルに属する

Rcpp で R コードを最適化する

Romain François

Consulting Datactive, ThinkR

本コースの復習

evalCpp()

evalCpp( "40 + 2" )
42

cppFunction()

cppFunction( "int fun(){ return 42; }")
fun()
42
Rcpp で R コードを最適化する

code.cppのC++コード

#include <Rcpp.h>
using namespace Rcpp ; 
// [[Rcpp::export]]
int timesTwo( int x ){
  return 2*x ; 
}

sourceCpp()関数でコンパイル・読み込みを行う

library(Rcpp)

sourceCpp( "code.cpp" )
timesTwo( 21 )
42
Rcpp で R コードを最適化する

Rcppヘッダーファイルのインクルード

#include <Rcpp.h>
_____ _________ ____ _

__ ________________
___ _________ ___ _ __
  ______ ___ _
_
  • Rcpp.hのみインクルードする

    • 他のヘッダーファイルは自動的にインクルードされる
Rcpp で R コードを最適化する

Rcpp名前空間の使用

#include <Rcpp.h>
using namespace Rcpp ;

__ ________________
___ _________ ___ _ __
  ______ ___ _
_
  • SomethingRcppに含まれる場合、Rcpp::Somethingの代わりにSomethingを使用する
Rcpp で R コードを最適化する

RへのエクスポートR

#include <Rcpp.h>
using namespace Rcpp ;

// [[Rcpp::export]]
___ _________ ___ _ __
  ______ ___ _
_
Rcpp で R コードを最適化する

関数本体

#include <Rcpp.h>
using namespace Rcpp ;

// [[Rcpp::export]]
int timesTwo( int x ){
  return 2*x ;
}
Rcpp で R コードを最適化する
#include <Rcpp.h>
using namespace Rcpp ;

// [[Rcpp::export]]
int timesTwo( int x ){
  return 2*x ;}

関数をRに読み込む

library(Rcpp)
sourceCpp( "code.cpp" )

他のR関数と同様に呼び出す。

timesTwo( 21 )
42
Rcpp で R コードを最適化する

さあ、練習しましょう!

Rcpp で R コードを最適化する

Preparing Video For Download...