SlideShare a Scribd company logo
1 of 5
Download to read offline
RcppSMCパッケージのソースを使用して, 1からパッケージを作成する手順を以下に記
す.
RcppSMC: Rcpp bindings for Sequential Monte Carlo
http://cran.r-project.org/web/packages/RcppSMC/index.html
1. RcppMySMCパッケージを作成し, そのsrcディレクトリに以下を保存する.
RcppSMCの
・srcのcppファイル
・inst/includeのhファイル
RStudioによるRcppを使ったパッケージ作成が簡単に行える.
詳しくは
http://www.rstudio.com/ide/docs/advanced/using_rcpp
2. Clean and Rebuild(RStudio)
ビルドは通る.
ただし, RcppSMCの公開用の関数は公開されていない.
3. cppファイルの修正
Rcpp Attribute を用いて書き直す.
extern "C" となっているfunctionについて, extern "C" の使用をやめて
// [[Rcpp::export]] 属性を使う.
修正前
extern "C" SEXP pfLineartBS(SEXP dataS, SEXP partS, SEXP usefS, SEXP funS) {
修正後
// [[Rcpp::export]]
SEXP pfLineartBS(SEXP dataS, SEXP partS, SEXP usefS, SEXP funS) {
4. Build and Reload
compileAttributes()が実行され, Rcpp::exportを適用したfunctionがRに公開される.
==> Rcpp::compileAttributes() * Updated src/RcppExports.cpp
* Updated R/RcppExports.R
5. ヘッダファイルを専用のディレクトリに移す
他のパッケージのように,
inst/include
ディレクトリを作成し, ここに.hファイルをmvする.
このままClean and Rebuildするとエラーが出る. ヘッダファイルを参照出来ないためで
ある.
6. src/Makevarsへの追記
ビルドオプションの変数を追記する. ヘッダファイルの場所はsrcの位置からの相対パス
で指定できる.
## combine with standard arguments for R
PKG_CPPFLAGS = -I../inst/include
PKG_LIBS += $(RCPP_LDFLAGS)
※Writing R Extentions
http://cran.r-project.org/doc/manuals/R-exts.pdf
の説明
The most common use of a ‘Makevars’ file is to set additional preprocessor options (for
example include paths) for C/C++ files via PKG_CPPFLAGS, and additional compiler
flags by
setting PKG_CFLAGS, PKG_CXXFLAGS, PKG_FFLAGS or PKG_FCFLAGS, for C,
C++, FORTRAN
or Fortran 9x respectively (see Section 5.5 [Creating shared objects], page 101).
NB: Include paths are preprocessor options, not compiler options, and must be set in
PKG_CPPFLAGS as otherwise platform-specific paths (e.g. ‘-I/usr/local/include’) will
take
precedence.
7. Clean and Rebuild
4と同じようにRに公開したいfunctionが公開出来る形態でビルドが完了する.
パッケージを作成する際に, 他のパッケージで用いられているC++の関数を使用したい
場合がある.
1. 被呼び出し関数の作成
以下のようなソースファイルを持つRcppを使ったパッケージRcppMyLib1をRStudioに
より作成・ビルドする.
hoge(), fuga()はrとcppの関数として公開される.
cppの関数として公開されるとは, inst/include直下にヘッダファイルが作成されるとい
うことである.
他のパッケージから参照するときには, DESCRIPTIONファイルのDependsとLinkingTo
に
このパッケージ名を記述する.
interfaces Attributes で rを記述しないと, Rへの公開がなくなる.
Rへの公開はRディレクトリのRcppExports.Rファイルにて行われているので確認する
と良い.
whatで指定されている文字列の関数がRに公開される.
この例でloadModule対象となっているRcppMyLib1_RcppExportsは,
src直下に自動生成されるRcppExports.cppに記述されている「Rcppのモジュール」で
ある.
RCPP_MODULE(名前)で「名前のRcppモジュール」が生成される.
この「Rのモジュール」がRcpp::loadModuleによってロードされている.
[補足]
たとえばRcppを使ったパッケージならRcppの関数を参照できる必要がある.
その設定がRStudioによるパッケージ作成/wRcppで自動的に行われている.
DESCRIPTIONファイルにRcppという文字列があるが, これがその自動設定である.
2. 呼び出し方
2.1 sourceCpp()を使う場合
Rcpp::depends() attributesを用いる.
警告が出るが, 実行出来る.
この警告についてきちんと理解しておきたいところである…
2.2 他のパッケージから呼ぶ場合
呼び出し主体のパッケージのDESCRIPTIONファイルに使用したいパッケージを記す.
呼び出し側ソースファイルについては, 2.1 sourceCpp()の場合と違って,
Rcpp::depends() attributes を外しておく.
2.1と同じ結果が得られる.
[参考文献]
Rcpp Attributes
Rcppを用いたPackage を自分でビルドしてみる

More Related Content

Similar to Rcppを用いたPackage を自分でビルドしてみる

130329 04
130329 04130329 04
130329 04openrtm
 
20130329 rtm4
20130329 rtm420130329 rtm4
20130329 rtm4openrtm
 
Web技術勉強会23回目
Web技術勉強会23回目Web技術勉強会23回目
Web技術勉強会23回目龍一 田中
 
#upcamp '12 Hack-a-thon Result
#upcamp '12 Hack-a-thon Result#upcamp '12 Hack-a-thon Result
#upcamp '12 Hack-a-thon ResultKazuhiro Hishinuma
 
Rouault imbert view_alpc_rpc_pacsec_jp
Rouault imbert view_alpc_rpc_pacsec_jpRouault imbert view_alpc_rpc_pacsec_jp
Rouault imbert view_alpc_rpc_pacsec_jpPacSecJP
 
Docker ComposeでMastodonが必要なものを梱包する話
Docker ComposeでMastodonが必要なものを梱包する話Docker ComposeでMastodonが必要なものを梱包する話
Docker ComposeでMastodonが必要なものを梱包する話Masahito Zembutsu
 
RTミドルウェアによるロボットプログラミング技術 2.プログラミングの基礎
RTミドルウェアによるロボットプログラミング技術 2.プログラミングの基礎RTミドルウェアによるロボットプログラミング技術 2.プログラミングの基礎
RTミドルウェアによるロボットプログラミング技術 2.プログラミングの基礎Noriaki Ando
 
Rtミドルウェア講習会@名城大学 20140624 3
Rtミドルウェア講習会@名城大学 20140624 3Rtミドルウェア講習会@名城大学 20140624 3
Rtミドルウェア講習会@名城大学 20140624 3openrtm
 
Nodejuku01 ohtsu
Nodejuku01 ohtsuNodejuku01 ohtsu
Nodejuku01 ohtsuNanha Park
 
RcppEigen and SVD
RcppEigen and SVDRcppEigen and SVD
RcppEigen and SVDXiangze
 
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応までDocker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応までMasahito Zembutsu
 
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-靖 小田島
 
Raspberry pi 用 toppers ssp シュリンク版(海賊版)の紹介
Raspberry pi 用 toppers ssp シュリンク版(海賊版)の紹介Raspberry pi 用 toppers ssp シュリンク版(海賊版)の紹介
Raspberry pi 用 toppers ssp シュリンク版(海賊版)の紹介Kazuhiro Takahashi
 
OpenStack + Common Lisp
OpenStack + Common LispOpenStack + Common Lisp
OpenStack + Common Lispirix_jp
 
普段の開発を少しだけ便利にする3つのレシピ
普段の開発を少しだけ便利にする3つのレシピ普段の開発を少しだけ便利にする3つのレシピ
普段の開発を少しだけ便利にする3つのレシピTakuma Maruyama
 
Implementation of Counters in ScopedBASIC
Implementation of Counters in ScopedBASICImplementation of Counters in ScopedBASIC
Implementation of Counters in ScopedBASICKazuhiro Hishinuma
 
tcpdump & xtrabackup @ MySQL Casual Talks #1
tcpdump & xtrabackup @ MySQL Casual Talks #1tcpdump & xtrabackup @ MySQL Casual Talks #1
tcpdump & xtrabackup @ MySQL Casual Talks #1Ryosuke IWANAGA
 

Similar to Rcppを用いたPackage を自分でビルドしてみる (20)

130329 04
130329 04130329 04
130329 04
 
20130329 rtm4
20130329 rtm420130329 rtm4
20130329 rtm4
 
Web技術勉強会23回目
Web技術勉強会23回目Web技術勉強会23回目
Web技術勉強会23回目
 
#upcamp '12 Hack-a-thon Result
#upcamp '12 Hack-a-thon Result#upcamp '12 Hack-a-thon Result
#upcamp '12 Hack-a-thon Result
 
Rouault imbert view_alpc_rpc_pacsec_jp
Rouault imbert view_alpc_rpc_pacsec_jpRouault imbert view_alpc_rpc_pacsec_jp
Rouault imbert view_alpc_rpc_pacsec_jp
 
統計解析ソフトR
統計解析ソフトR統計解析ソフトR
統計解析ソフトR
 
Docker ComposeでMastodonが必要なものを梱包する話
Docker ComposeでMastodonが必要なものを梱包する話Docker ComposeでMastodonが必要なものを梱包する話
Docker ComposeでMastodonが必要なものを梱包する話
 
RTミドルウェアによるロボットプログラミング技術 2.プログラミングの基礎
RTミドルウェアによるロボットプログラミング技術 2.プログラミングの基礎RTミドルウェアによるロボットプログラミング技術 2.プログラミングの基礎
RTミドルウェアによるロボットプログラミング技術 2.プログラミングの基礎
 
Rtミドルウェア講習会@名城大学 20140624 3
Rtミドルウェア講習会@名城大学 20140624 3Rtミドルウェア講習会@名城大学 20140624 3
Rtミドルウェア講習会@名城大学 20140624 3
 
Nodejuku01 ohtsu
Nodejuku01 ohtsuNodejuku01 ohtsu
Nodejuku01 ohtsu
 
Rでreproducible research
Rでreproducible researchRでreproducible research
Rでreproducible research
 
MoteMote Compiler Plugin
MoteMote Compiler PluginMoteMote Compiler Plugin
MoteMote Compiler Plugin
 
RcppEigen and SVD
RcppEigen and SVDRcppEigen and SVD
RcppEigen and SVD
 
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応までDocker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
 
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-
 
Raspberry pi 用 toppers ssp シュリンク版(海賊版)の紹介
Raspberry pi 用 toppers ssp シュリンク版(海賊版)の紹介Raspberry pi 用 toppers ssp シュリンク版(海賊版)の紹介
Raspberry pi 用 toppers ssp シュリンク版(海賊版)の紹介
 
OpenStack + Common Lisp
OpenStack + Common LispOpenStack + Common Lisp
OpenStack + Common Lisp
 
普段の開発を少しだけ便利にする3つのレシピ
普段の開発を少しだけ便利にする3つのレシピ普段の開発を少しだけ便利にする3つのレシピ
普段の開発を少しだけ便利にする3つのレシピ
 
Implementation of Counters in ScopedBASIC
Implementation of Counters in ScopedBASICImplementation of Counters in ScopedBASIC
Implementation of Counters in ScopedBASIC
 
tcpdump & xtrabackup @ MySQL Casual Talks #1
tcpdump & xtrabackup @ MySQL Casual Talks #1tcpdump & xtrabackup @ MySQL Casual Talks #1
tcpdump & xtrabackup @ MySQL Casual Talks #1
 

Rcppを用いたPackage を自分でビルドしてみる

  • 1. RcppSMCパッケージのソースを使用して, 1からパッケージを作成する手順を以下に記 す. RcppSMC: Rcpp bindings for Sequential Monte Carlo http://cran.r-project.org/web/packages/RcppSMC/index.html 1. RcppMySMCパッケージを作成し, そのsrcディレクトリに以下を保存する. RcppSMCの ・srcのcppファイル ・inst/includeのhファイル RStudioによるRcppを使ったパッケージ作成が簡単に行える. 詳しくは http://www.rstudio.com/ide/docs/advanced/using_rcpp 2. Clean and Rebuild(RStudio) ビルドは通る. ただし, RcppSMCの公開用の関数は公開されていない. 3. cppファイルの修正 Rcpp Attribute を用いて書き直す. extern "C" となっているfunctionについて, extern "C" の使用をやめて // [[Rcpp::export]] 属性を使う. 修正前 extern "C" SEXP pfLineartBS(SEXP dataS, SEXP partS, SEXP usefS, SEXP funS) { 修正後 // [[Rcpp::export]] SEXP pfLineartBS(SEXP dataS, SEXP partS, SEXP usefS, SEXP funS) { 4. Build and Reload compileAttributes()が実行され, Rcpp::exportを適用したfunctionがRに公開される. ==> Rcpp::compileAttributes() * Updated src/RcppExports.cpp * Updated R/RcppExports.R 5. ヘッダファイルを専用のディレクトリに移す 他のパッケージのように, inst/include ディレクトリを作成し, ここに.hファイルをmvする. このままClean and Rebuildするとエラーが出る. ヘッダファイルを参照出来ないためで ある.
  • 2. 6. src/Makevarsへの追記 ビルドオプションの変数を追記する. ヘッダファイルの場所はsrcの位置からの相対パス で指定できる. ## combine with standard arguments for R PKG_CPPFLAGS = -I../inst/include PKG_LIBS += $(RCPP_LDFLAGS) ※Writing R Extentions http://cran.r-project.org/doc/manuals/R-exts.pdf の説明 The most common use of a ‘Makevars’ file is to set additional preprocessor options (for example include paths) for C/C++ files via PKG_CPPFLAGS, and additional compiler flags by setting PKG_CFLAGS, PKG_CXXFLAGS, PKG_FFLAGS or PKG_FCFLAGS, for C, C++, FORTRAN or Fortran 9x respectively (see Section 5.5 [Creating shared objects], page 101). NB: Include paths are preprocessor options, not compiler options, and must be set in PKG_CPPFLAGS as otherwise platform-specific paths (e.g. ‘-I/usr/local/include’) will take precedence. 7. Clean and Rebuild 4と同じようにRに公開したいfunctionが公開出来る形態でビルドが完了する. パッケージを作成する際に, 他のパッケージで用いられているC++の関数を使用したい 場合がある. 1. 被呼び出し関数の作成 以下のようなソースファイルを持つRcppを使ったパッケージRcppMyLib1をRStudioに より作成・ビルドする. hoge(), fuga()はrとcppの関数として公開される. cppの関数として公開されるとは, inst/include直下にヘッダファイルが作成されるとい うことである.
  • 3. 他のパッケージから参照するときには, DESCRIPTIONファイルのDependsとLinkingTo に このパッケージ名を記述する. interfaces Attributes で rを記述しないと, Rへの公開がなくなる. Rへの公開はRディレクトリのRcppExports.Rファイルにて行われているので確認する と良い. whatで指定されている文字列の関数がRに公開される. この例でloadModule対象となっているRcppMyLib1_RcppExportsは, src直下に自動生成されるRcppExports.cppに記述されている「Rcppのモジュール」で ある. RCPP_MODULE(名前)で「名前のRcppモジュール」が生成される. この「Rのモジュール」がRcpp::loadModuleによってロードされている. [補足] たとえばRcppを使ったパッケージならRcppの関数を参照できる必要がある. その設定がRStudioによるパッケージ作成/wRcppで自動的に行われている. DESCRIPTIONファイルにRcppという文字列があるが, これがその自動設定である. 2. 呼び出し方 2.1 sourceCpp()を使う場合 Rcpp::depends() attributesを用いる.