アート・オブ・Rプログラミング

[cover photo]
  • 2012年09月 発行
  • 392ページ
  • ISBN978-4-87311-579-5
  • フォーマット Print PDF
  • 原書: The Art of R Programming

オライリー・ジャパンで書籍を購入:
定価3,456円

Ebook Storeで電子版を購入:
価格2,765円

Rは統計分野では標準ツールして使われている人気の高いオープンソースソフトウェアです。統計分野のみならず、金融、数学、物理、化学、天文、バイオ、薬学等の幅広い分野での利用をサポートする豊富なパッケージ群が用意されており、多くのユーザからの支持を集めています。本書はRの強力かつ柔軟なプログラミング能力に焦点を当て、Rスクリプトを書く上でのテクニック、コツ、注意点をわかりやすく解説します。また、他言語との連携、並列R、デバッグ、コードの高速化など他のR書籍にはなかった情報も提供します。プログラミング言語としてRを活用し、その威力を最大限発揮させる上で必携の一冊です。

関連書籍

Rクイックリファレンス 第2版
Rクックブック
Rパッケージ開発入門
ビューティフルデータ

謝辞
はじめに

1章 Rを始める
    1.1 Rの実行方法
        1.1.1 対話モード
        1.1.2 バッチモード
    1.2 最初のRセッション
    1.3 関数の概要
        1.3.1 変数のスコープ
        1.3.2 デフォルト引数
    1.4 重要なRデータ構造の概説
        1.4.1 ベクトル:Rの主力
        1.4.2 文字列
        1.4.3 行列
        1.4.4 リスト
        1.4.5 データフレーム
        1.4.6 クラス
    1.5 応用例:試験の成績の回帰分析
    1.6 起動と終了
    1.7 ヘルプ
        1.7.1 help()関数
        1.7.2 example()関数
        1.7.3 探しているものが正確にはわからない場合
        1.7.4 その他のトピックのヘルプ
        1.7.5 バッチモードのヘルプ
        1.7.6 インターネット上のヘルプ

2章 ベクトル
    2.1 スカラ、ベクトル、配列、行列
        2.1.1 ベクトル要素の追加と削除
        2.1.2 ベクトルの長さの取得
        2.1.3 ベクトルとしての行列と配列
    2.2 宣言
    2.3 リサイクル
    2.4 一般的なベクトル操作
        2.4.1 ベクトルの算術演算と論理演算
        2.4.2 ベクトルのインデックス付け
        2.4.3 :演算子を使った便利なベクトルの作成
        2.4.4 seq()を使ったベクトルシーケンスの作成
        2.4.5 rep()を使ったベクトル定数の繰り返し
    2.5 all()とany()の使用
        2.5.1 応用例:連続値を見つける
        2.5.2 応用例:離散値時系列の予測
    2.6 ベクトル化された演算
        2.6.1 ベクトルを入力し、ベクトルを出力する
        2.6.2 ベクトルを入力し、行列を出力する
    2.7 NA値とNULL値
        2.7.1 NAの使用
        2.7.2 NULLの使用
    2.8 フィルタリング
        2.8.1 フィルタリンクインデックスの作成
        2.8.2 subset()関数を使ったフィルタリング
        2.8.3 選択関数which()
    2.9 ベクトル化されたif-then-else:ifelse()関数
        2.9.1 応用例:関係の尺度
        2.9.2 応用例:アワビデータセットの再符号化
    2.10 ベクトル等価性の検査
    2.11 ベクトル要素名
    2.12 c()に関する詳細

3章 行列と配列
    3.1 行列の作成
    3.2 一般的な行列操作
        3.2.1 行列での線形代数演算の実行
        3.2.2 行列のインデックス付け
        3.2.3 応用例:画像操作
        3.2.4 行列のフィルタリング
        3.2.5 応用例:共分散行列の作成
    3.3 行列の行と列への関数の適用
        3.3.1 apply()関数の使用
        3.3.2 応用例:外れ値の検出
    3.4 行列の行と列の追加と削除
        3.4.1 行列のサイズ変更
        3.4.2 応用例:グラフの頂点が最も近いペアを見つける
    3.5 ベクトルと行列の違いに関する詳細
    3.6 予期せぬ次元削減の回避
    3.7 行列の行と列の名前付け
    3.8 高次元配列

4章 リスト
    4.1 リストの作成
    4.2 一般的なリスト操作
        4.2.1 リストのインデックス付け
        4.2.2 リスト要素の追加と削除
        4.2.3 リストサイズの取得
        4.2.4 応用例:テキスト索引
    4.3 リストの成分と値へのアクセス
    4.4 リストへの関数の適用
        4.4.1 lapply()関数とsapply()関数の使用
        4.4.2 応用例:テキスト索引(続き)
        4.4.3 応用例:再びアワビデータ
    4.5 再帰的リスト

5章 データフレーム
    5.1 データフレームの作成
        5.1.1 データフレームへのアクセス
        5.1.2 応用例:試験の成績の回帰分析(続き)
    5.2 その他の行列的な操作
        5.2.1 サブデータフレームの抽出
        5.2.2 NA値の扱いに関する詳細
        5.2.3 rbind()関数とcbind()関数の使用とその代替手段
        5.2.4 apply()の適用
        5.2.5 応用例:給与調査
    5.3 データフレームのマージ
        5.3.1 応用例:従業員データベース
    5.4 データフレームへの関数の適用
        5.4.1 データフレームでのlapply()とsapply()の使用
        5.4.2 応用例:ロジスティック回帰モデルの適用
        5.4.3 応用例:中国語方言学習の支援

6章 ファクタと表
    6.1 ファクタと水準
    6.2 ファクタで使う一般的関数
        6.2.1 tapply()関数
        6.2.2 split()関数
        6.2.3 by()関数
    6.3 表の扱い
        6.3.1 表に対する行列/配列的な操作
        6.3.2 応用例:部分表の抽出
        6.3.3 応用例:表内の最大セルの検出
    6.4 ファクタ/表関連のその他の関数
        6.4.1 aggregate()関数
        6.4.2 cut()関数

7章 プログラミング構造
    7.1 制御文
        7.1.1 ループ
        7.1.2 一連の非ベクトルに対するループ
        7.1.3 if-else
    7.2 算術演算子とブール演算子およびその値
    7.3 引数のデフォルト値
    7.4 戻り値
        7.4.1 明示的にreturn()を呼び出すかどうかの判断
        7.4.2 複雑なオブジェクトを返す
    7.5 関数はオブジェクト
    7.6 環境とスコープの問題
        7.6.1 トップレベル環境
        7.6.2 スコープ階層
        7.6.3 ls()に関する詳細
        7.6.4 関数には(ほとんど)副作用はない
        7.6.5 応用例:呼び出しフレームの内容を表示する関数
    7.7 Rにはポインタがない
    7.8 上位レベルへの書き込み
        7.8.1 スーパーアサインメント演算子を使った非ローカルへの書き込み
        7.8.2 assign()を使った非ローカルへの書き込み
        7.8.3 応用例:Rでの離散事象シミュレーション
        7.8.4 グローバル変数はどのようなときに使うべきか
        7.8.5 クロージャ
    7.9 再帰
        7.9.1 クイックソートの実装
        7.9.2 応用例:二分探索木
    7.10 置換関数
        7.10.1 置換関数とみなす場合
        7.10.2 応用例:自己記録ベクトルクラス
    7.11 関数コードを作成するためのツール
        7.11.1 テキストエディタと統合開発環境
        7.11.2 edit()関数
    7.12 独自の二項演算の記述
    7.13 匿名関数

8章 数学演算とシミュレーションの実行
    8.1 数学関数
        8.1.1 応用例:確率の計算
        8.1.2 累積合計と累積積
        8.1.3 最小値と最大値
        8.1.4 微積分
    8.2 統計分布のための関数
    8.3 ソート
    8.4 ベクトルや行列に対する線形代数演算
        8.4.1 応用例:ベクトル外積
        8.4.2 応用例:マルコフ連鎖の定常分布を求める
    8.5 集合演算
    8.6 Rでのシミュレーションプログラミング
        8.6.1 組み込み乱数ジェネレータ
        8.6.2 繰り返し実行するたびに同じ乱数列を取得する
        8.6.3 応用例:組合せシミュレーション

9章 オブジェクト指向プログラミング
    9.1 S3クラス
        9.1.1 S3ジェネリック関数
        9.1.2 例:lm()線形モデル関数でのOOP
        9.1.3 ジェネリックメソッドの実装を探す
        9.1.4 S3クラスの記述
        9.1.5 継承の利用
        9.1.6 応用例:上三角行列を格納するためのクラス
        9.1.7 応用例:多項式回帰の方法
    9.2 S4クラス
        9.2.1 S4クラスの記述
        9.2.2 S4クラスでのジェネリック関数の実装
    9.3 S3とS4の対比
    9.4 オブジェクトの管理
        9.4.1 ls()関数を使ったオブジェクトの列挙
        9.4.2 rm()関数を使った特定のオブジェクトの削除
        9.4.3 save()関数を使った一連のオブジェクトの保存
        9.4.4 構造を知る
        9.4.5 exists()関数

10章 入出力
    10.1 キーボードとモニタへのアクセス
        10.1.1 scan()関数の使用
        10.1.2 readline()の使用
        10.1.3 画面への出力
    10.2 ファイルの読み書き
        10.2.1 ファイルからのデータフレームや行列の読み込み
        10.2.2 テキストファイルの読み込み
        10.2.3 コネクションの概要
        10.2.4 応用例:PUMS国勢調査ファイルの読み込み
        10.2.5 URLを使ったリモートマシン上のファイルへのアクセス
        10.2.6 ファイルへの書き込み
        10.2.7 ファイルとディレクトリの情報の取得
        10.2.8 応用例:複数ファイルの内容の合計
    10.3 インターネットへのアクセス
        10.3.1 TCP/IPの概要
        10.3.2 Rでのソケット
        10.3.3 :並列Rの実装

11章 文字列操作
    11.1 文字列操作関数の概要
        11.1.1 grep()
        11.1.2 nchar()
        11.1.3 paste()
        11.1.4 sprintf()
        11.1.5 substr()、substring()
        11.1.6 strsplit()
        11.1.7 regexpr()
        11.1.8 gregexpr()
    11.2 正規表現
        11.2.1 応用例:ファイル名が特定の拡張子を持つかどうかの検査
        11.2.2 応用例:ファイル名の作成
    11.3 edtdbgデバッグツールでの文字列ユーティリティの使用

12章 グラフィックス
    12.1 グラフの作成
        12.1.1 Rの基本グラフィックスの立役者:plot()関数
        12.1.2 線の追加:abline()関数
        12.1.3 古いグラフを保持したまま新しいグラフを開始する
        12.1.4 応用例:同じグラフ上の2つの密度推定
        12.1.5 応用例:多項式回帰例の拡張
        12.1.6 点の追加:points()関数
        12.1.7 凡例の追加:legend()関数
        12.1.8 テキストの追加:text()関数
        12.1.9 位置の正確な特定:locator()関数
        12.1.10 プロットの復元
    12.2 グラフのカスタマイズ
        12.2.1 文字サイズの変更:cexオプション
        12.2.2 軸の範囲の変更:xlimオプションとylimオプション
        12.2.3 多角形の追加:polygon()関数
        12.2.4 点の平滑化:lowess()関数とloess()関数
        12.2.5 陽関数のグラフ化
        12.2.6 応用例:曲線の一部を拡大する
    12.3 グラフのファイルへの保存
        12.3.1 Rグラフィックデバイス
        12.3.2 表示されたグラフの保存
        12.3.3 Rグラフィックデバイスのクローズ
    12.4 3次元プロットの作成

13章 デバッグ
    13.1 デバッグの基本原則
        13.1.1 デバッグの神髄:確認の原則
        13.1.2 小さく始める
        13.1.3 モジュール式のトップダウンでのデバッグ
        13.1.4 アンチデバッグ
    13.2 デバッグツールを使う理由
    13.3 Rのデバッグ機能の利用
        13.3.1 debug()関数とbrowser()関数を使ったシングルステップ実行
        13.3.2 ブラウザコマンドの使用
        13.3.3 ブレークポイントの設定
        13.3.4 trace()関数を使った追跡
        13.3.5 traceback()関数とdebugger()関数を使ったクラッシュ後の検査の実行
        13.3.6 応用例:2つの完全なデバッグセッション
    13.4 上級編:さらに便利なデバッグツール
    13.5 シミュレーションコードのデバッグ時の整合性の確保
    13.6 構文エラーと実行時エラー
    13.7 GDBでのR自体の実行

14章 パフォーマンス強化:速度とメモリ
    14.1 高速なRコードの記述
    14.2 ループに対する恐れ
        14.2.1 高速化のためのベクトル化
        14.2.2 応用例:モンテカルロシミュレーションを使った高速化
        14.2.3 応用例:累乗行列の作成
    14.3 関数型プログラミングとメモリに関する問題
        14.3.1 ベクトル割り当ての問題
        14.3.2 変更時コピーの問題
        14.3.3 応用例:メモリコピーの回避
    14.4 Rprof()を使ったコードの遅い箇所の検出
        14.4.1 Rprof()を使ったモニタリング
        14.4.2 Rprof()の動作方法
    14.5 バイトコードコンパイル
    14.6 データがメモリに収まらない
        14.6.1 チャンキング
        14.6.2 メモリ管理のためのRパッケージの使用

15章 他の言語とのRインタフェース
    15.1 Rから呼び出すC/C++関数の記述
        15.1.1 RからC/C++への下準備
        15.1.2 例:正方行列からの下対角要素の抽出
        15.1.3 コードのコンパイルと実行
        15.1.4 R/Cコードのデバッグ
        15.1.5 応用例:離散値時系列データの予測
    15.2 PythonからのRの利用
        15.2.1 RPyのインストール
        15.2.2 RPy構文

16章 並列R
    16.1 相互アウトリンク問題
    16.2 snowパッケージ
        16.2.1 snowコードの実行
        16.2.2 snowコードの分析
        16.2.3 どの程度高速化できるか
        16.2.4 応用例:k-mean法
    16.3 Cの活用
        16.3.1 マルチコアマシンの使用
        16.3.2 応用例:OpenMPでの相互アウトリンク問題
        16.3.3 OpenMPコードの実行
        16.3.4 OpenMPコードの分析
        16.3.5 その他のOpenMPプラグマ
        16.3.6 GPUプログラミング
    16.4 パフォーマンスに関する一般的な考察
        16.4.1 オーバーヘッドの要因
        16.4.2 驚異的並列アプリケーションと非驚異的並列アプリケーション
        16.4.3 静的なタスク割り当てと動的なタスク割り当ての対比
        16.4.4 ソフトウェアの魔術:一般的な問題を驚異的並列問題に変える
    16.5 並列Rコードのデバッグ

付録A Rのインストール
    A.1 CRANからのRのダウンロード
    A.2 Linuxのパッケージマネージャからのインストール
    A.3 ソースからのインストール

付録B パッケージのインストールと使用
    B.1 パッケージの基本
    B.2 ハードドライブからのパッケージのロード
    B.3 Webからのパッケージのダウンロード
        B.3.1 パッケージの自動インストール
        B.3.2 パッケージの手動インストール
    B.4 パッケージ内の関数の列挙

索引

Feedback

皆さんのご意見をお聞かせください。ご購入いただいた書籍やオライリー・ジャパンへのご感想やご意見、ご提案などをお聞かせください。より良い書籍づくりやサービス改良のための参考にさせていただきます。
[feedbackページへ]