SlideShare uma empresa Scribd logo
1 de 5
Baixar para ler 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 を自分でビルドしてみる

Mais conteúdo relacionado

Semelhante a 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
 

Semelhante a 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
 

Último

CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 

Último (8)

CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 

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を用いる.