Chapter 7 基本データ型とデータ構造
Rcpp では R の全てのデータ型とデータ構造を利用することができます。ユーザーは Rcpp で提供される様々なクラスを通して、実行中の R のメモリにあるオブジェクトを直接操作することができます。この章では Rcpp で利用できるデータ型とデータ構造を紹介します。
7.1 基本データ型
R には基本的なデータ型として、logical
(論理値)、integer
(整数)、numeric
(実数)、complex
(複素数)、character
(文字列)、Date
(日付)、POSIXct
(日時) があります。Rcpp には、これらと対応したベクトル型と行列型が定義されています。ただし、日付と日時については R と同様にベクトル型だけが定義されています。
本書ではこれ以降 Rcpp が提供するベクトル型と行列型を総称するために Vector
、 Matrix
という語を用います。
R、Rcpp、C++ で利用できる基本的なデータ型の対応関係をまとめると下の表のようになります。
Rベクトル | Rcppベクトル型 | Rcpp行列型 | Rcppスカラー型 | C++スカラー型 | |
---|---|---|---|---|---|
論理 | logical |
NumericVector |
NumericMatrix |
- | bool |
整数 | integer |
IntegerVector |
IntegerMatrix |
- | int |
実数 | numeric |
NumericVector |
NumericMatrix |
- | double |
複素数 | complex |
ComplexVector |
ComplexMatrix |
Rcomplex |
complex |
文字列 | character |
CharacterVector (StringVector ) |
CharacterMatrix (StringMatrix ) |
String |
string |
日付 | Date |
DateVector |
- | Date |
- |
日時 | POSIXct |
DatetimeVector |
- | Datetime |
time_t |
7.2 データ構造
R にはベクトル、行列の他にデータフレーム、リスト、S3 クラス、S4 クラスのデータ構造がありますが、Rcpp はそれら全てを扱うことができます。
下の表に R と Rcpp のデータ構造の対応関係を示します。
R データ構造 | Rcpp データ構造 |
---|---|
data.frame |
DataFrame |
list |
List |
S3 クラス | List |
S4 クラス | S4 |
Dataframe
は、様々な型のベクトルを要素として格納することができます。しかし、要素となる全てのベクトルの長さは等しいという制約があります。
List
は、Dataframe
や List
を含む、どのような型のオブジェクトでも要素として持つことができます。要素となるベクトルの長さにも制限はありません。
S3 クラスは属性 class
に独自の名前が設定されたリストですので、使い方は List
と同様です。
S4 クラスはスロット(slot
)と呼ばれる内部データを持っています。Rcpp の S4
を用いることで R で定義した S4 クラスのオブジェクトの作成、および、スロットへのアクセスが可能になります。
また、Rcpp では Vector
, List
, DataFrame
は、どれもある種のベクトルとして実装されています。つまり、Vector
は、スカラー値を要素とするベクトル、DataFrame
は同じ長さの Vector
オブジェクトを要素とするベクトル、List
は任意のオブジェクトを要素とするベクトルです。そのため、Vector
, List
, DataFrame
は多くの共通するメンバー関数を持っています。