みんなのRcpp
はじめに
1
Rcppの活用ポイント
2
インストール
2.1
C++コンパイラのインストール
2.1.1
Windows
2.1.2
Mac
2.1.3
Linux
2.1.4
その他の自分でインストールしたコンパイラを使いたい場合
2.2
Rcpp のインストール
3
基本的な使い方
3.1
Rcppコードを書く
4
Rcppにおける関数定義の基本形
5
C++11
5.1
C++11 を有効にする
5.2
おすすめ C++11 機能
5.2.1
初期化リスト
5.2.2
auto
5.2.3
decltype
5.2.4
範囲 for
5.2.5
ラムダ式
6
コンソール画面への出力
7
基本データ型とデータ構造
7.1
基本データ型
7.2
データ構造
8
Vector
8.1
Vectorオブジェクトの作成
8.2
Vector要素へのアクセス
8.3
メンバ関数
8.3.1
length() size()
8.3.2
names()
8.3.3
offset(name) findName(name)
8.3.4
fill(x)
8.3.5
sort()
8.3.6
assign( first_it, last_it)
8.3.7
push_back(x)
8.3.8
push_back( x, name )
8.3.9
push_front(x)
8.3.10
push_front( x, name )
8.3.11
begin()
8.3.12
end()
8.3.13
insert( i, x )
8.3.14
insert( it, x )
8.3.15
erase(i)
8.3.16
erase(it)
8.3.17
erase( first_i, first_i )
8.3.18
erase( first_it, last_it )
8.3.19
containsElementNamed(name)
8.4
静的メンバ関数
8.4.1
get_na()
8.4.2
is_na(x)
8.4.3
create( x1, x2, …)
8.4.4
import( first_it , last_it )
8.4.5
import_transform( first_it, last_it, func)
9
Matrix
9.0.1
作成
9.0.2
要素へのアクセス
9.0.3
行・列・部分行列への参照
9.1
メンバ関数
9.1.1
nrow() rows()
9.1.2
ncol() cols()
9.1.3
row( i )
9.1.4
column( i )
9.1.5
fill_diag( x )
9.1.6
offset(i,j)
9.2
静的メンバ関数
9.2.1
Matrix::diag( size, x )
9.3
その他の関数
9.3.1
rownames( m )
9.3.2
colnames( m )
9.3.3
transpose( m )
10
DataFrame
10.0.1
length() size()
10.0.2
begin()
10.0.3
end()
10.0.4
insert( it, v )
10.0.5
erase(i)
10.0.6
erase(first_it, last_it)
10.0.7
containsElementNamed(name)
10.0.8
inherits(str)
11
List
11.1
オブジェクトの作成
11.2
要素へのアクセス
11.3
メンバ関数
12
S3・S4 クラス
12.1
S3クラス
12.2
S4クラス
12.2.1
slot へのアクセス
12.2.2
新しい S4 クラスのオブジェクトを作成する
13
String
13.1
String オブジェクトの作成
13.2
演算子
13.3
メンバ関数
13.3.1
replace_first( str, new_str)
13.3.2
replace_last( str, new_str)
13.3.3
replace_all( str, new_str)
13.3.4
push_back(str)
13.3.5
push_back(str)
13.3.6
set_na()
13.3.7
get_cstring()
13.3.8
get_encoding()
13.3.9
set_encoding(enc)
13.3.10
コード例
14
Date
14.1
演算子
15
Datetime
15.1
Datetime オブジェクトの作成
15.2
タイムゾーン
15.3
演算子
15.4
メンバ関数
16
RObject
16.0.1
inherits(str)
16.0.2
slot(name)
16.0.3
hasSlot(name)
16.0.4
attr(name)
16.0.5
attributeNames()
16.0.6
hasAttribute(name)
16.0.7
isNULL()
16.0.8
sexp_type()
16.0.9
isObject()
16.0.10
isS4()
16.1
A.20.2 RObject を利用した型の判別
17
Rのオブジェクトを扱う際の注意点
17.1
ベクトル同士の代入
17.2
要素番号の型
17.3
[]演算子の返値
17.4
四則演算
18
論理演算
18.1
LogicalVector の正体
18.2
論理演算
18.3
LogicalVector を受け取る関数
18.3.1
all() と any()
18.3.2
ifelse()
18.4
LogicalVector の要素の評価
18.5
Rライクな関数の一覧
18.5.1
ベクトルに関連する関数
18.5.2
文字列に関連する関数
18.5.3
値の検索に関連する関数
18.5.4
重複の値に関連する関数
18.5.5
集合演算に関連する関数
18.5.6
最大値・最小値に関連する関数
18.5.7
集計に関連する関数
18.5.8
端数処理に関連する関数
18.5.9
数学に関連する関数
18.5.10
論理値に関連する関数
18.5.11
NA、Inf、NaNに関連する関数
18.5.12
apply関数
18.5.13
cbind関数
18.5.14
サンプリング関数
19
確率分布
19.1
確率分布関数の基本構造
19.1.1
連続分布
19.1.2
離散分布
19.1.3
一様分布
19.1.4
正規分布
19.1.5
対数正規分布
19.1.6
ガンマ分布
19.1.7
ベータ分布
19.1.8
非心ベータ分布
19.1.9
カイ2乗分布
19.1.10
非心カイ2乗分布
19.1.11
t分布
19.1.12
非心t分布
19.1.13
F分布
19.1.14
非心F分布
19.1.15
コーシー分布
19.1.16
指数分布
19.1.17
ロジスティック分布
19.1.18
ワイブル分布
19.2
離散分布
19.2.1
二項分布
19.2.2
負の二項分布(成功確率を指定するバージョン)
19.2.3
負の二項分布(平均値を指定するバージョン)
19.2.4
ポワソン分布
19.2.5
幾何分布
19.2.6
超幾何分布
19.2.7
ウィルコクソン順位和検定統計量の分布
19.2.8
ウィルコクソン符号順位検定統計量の分布
20
Rの関数を利用する
20.1
Function を用いた方法
20.2
Environment を用いた方法
21
NA NaN Inf NULL
21.1
NA NaN Inf の値
21.2
NA NaN Inf の判定
21.2.1
ベクトルの要素をまとめて判定する場合
21.2.2
ベクトルの要素1つに対して判定する場合
21.3
NULL
21.4
Rcpp で NA を扱う際の注意点
22
属性値
23
factor
24
エラー処理
24.1
stop()とwarning()
24.2
C++ 例外を投げる
25
キャンセル処理
25.0.1
ユーザーからのキャンセルを受け付ける。
26
R Math Library
27
Rのコード中にRcppのコードを埋め込む
28
Environment
28.1
Environment オブジェクトの作成
28.2
環境にあるオブジェクトにアクセスする
28.3
新しい環境を作成する
28.3.1
new_env(size = 29)
28.3.2
new_env(parent, size = 29)
28.4
メンバ関数
28.4.1
get(name)
28.4.2
ls(all)
28.4.3
find(name)
28.4.4
exists(name)
28.4.5
assign( name, x )
28.4.6
isLocked()
28.4.7
remove(name)
28.4.8
lock(bindings = false)
28.4.9
lockBinding(name)
28.4.10
unlockBinding(name){
28.4.11
bindingIsLocked(name)
28.4.12
bindingIsActive(name)
28.4.13
is_user_database()
28.4.14
parent()
28.4.15
new_child(hashed)
28.5
static メンバ関数
28.5.1
Environment::Rcpp_namespace()
28.5.2
Environment::namespace_env(package)
29
イテレーター
30
標準 C++ のデータ構造を利用する
30.1
標準 C++ データ構造と Rcpp データ構造の変換
30.2
標準 C++ データ構造を関数の引数や返値にする
31
標準 C++ アルゴリズム
32
Boost を利用する
33
Rcppを用いたパッケージ作成
33.1
Rcppを用いたパッケージ作成の手順
33.1.1
手動で自作パッケージを Rcpp に対応させる
33.1.2
Rcpp.package.skeleton() を利用する
33.1.3
devtools::use_rcpp() を用いる
33.2
roxygen2 パッケージを用いてパッケージのパッケージのドキュメントを作成する
33.3
自作パッケージで他のパッケージのC/C++関数を利用する
33.4
自作パッケージでサードパーティのC/C++ライブラリを利用する
34
RcppParallel
34.1
インストール
34.1.1
parallelFor, parallelReduce
34.1.2
RVector, RMatrix
34.2
Worker
34.3
例:parallelFor()
34.4
例:parallelReduce()
35
リンク
36
Rcpp Attributes
36.1
利用可能な Rcpp Attributes
36.1.1
Rcpp::export
36.2
Rcpp::interfaces
36.3
Rcpp::depends
36.4
Rcpp::plugins
36.5
Rcpp Attributes を処理する Rcpp の関数
36.5.1
compileAttributes()
37
書き加える可能性のある項目リスト
38
済み
Published with bookdown
みんなのRcpp
Chapter 1
Rcppの活用ポイント
Rと比べて C++ で書くことによって特に高速化が見込めるのは次のようなケースです。
繰り返し処理、特に次の処理が前の処理に依存しており並列化できない場合
ベクターや行列の個々の要素へアクセスする場合
繰り返し関数の呼び出しがある場合
ベクターのサイズを動的に変更する場合
高度なデータ構造やアルゴリズムを用いた処理