Rプログラミング&グラフィックス
関数型言語の性質を多く取り入れた
Rの表現力の高さはプログラミング言語としても
素晴らしい魅力を持つ。
実用的なオブジェクト指向により、
Rのグラフィックスは情報を
『可視化する』という行為において
簡便さと自由度の高さを誇る。
Rの表現力の高さはプログラミング言語としても
素晴らしい魅力を持つ。
実用的なオブジェクト指向により、
Rのグラフィックスは情報を
『可視化する』という行為において
簡便さと自由度の高さを誇る。
|
※在庫があれば上記サイトで
入手できます。 |
[著]高階知巳 [監] [価格]3,990 円(税込) [判型]B5変型/260頁 [初版]2008/05/15 [ISBN]978-4-86167-234-7 |
■ 本書について
私はRのおかげで、勤務先で、生産性が高い、かつ楽しい問題解決を行ってきた。他のプログラミング言語やExcelだと答えを出すのに3日かかるようなことが、Rだと1時間で答えを出せてしまう。それに、Rで問題を解くプログラムを書くのは楽しい。簡潔で直感的に解法を表現することができるのだ。このような素晴らしいRを使ったからこそ、世の中に製品を出せたということもしばしばある。私の仕事は、Rの代表的な分野と思われている統計分析の分野ではなく、ソフトウェアが専門のエンジニアだ。C++やJavaといった主流派の言語も使っているが、アルゴリズムに関わることが多かったため、アルゴリズムを素早く、忠実に表現できるツールを必要としていた。そして、Rに辿り着いた。
「素早く、忠実に」というのは、実はRが言語仕様の基にしたSの開発者であるJ. Chambersが、Sの目標は "To turn ideas into software, quickly and faithfully" であると著書で述べている通りである。このような性質を持ったツールであれば、エンジニアをよりクリエイティブにすることができるに違いないと思う。
私がSを使い始めたのは10年近く前。その頃は高価な商用のSを使っていた。やがて、職場の異動をきっかけにRを積極的に使うようになった。その頃、R用の画像処理パッケージを公開した。そして、その成果をDSC2003というRをテーマの中心とした国際ワークショップで発表する予定だった。しかし、日本を出発するちょうど2日前に湾岸戦争が勃発し、会社命令で海外渡航が禁じられてしまい、DSC2003に出席することはできなかった。非常に残念なことであったが、今となっては懐かしい思い出の1つである。
その前後から、Rの発展により、職場でもRを気軽に人に薦められるようになり、それなりにユーザが増えてきた。その過程で、初心者がわかりにくいところなどに気をつかいながら、勉強会のテキストを書いて人に説明してきた。そうせざるを得なかったのは、統計が専門ではない人向けの、普通のプログラミング言語としての書籍が少なかったからだ。
R(やS)は汎用的なデータ分析環境として生まれたことから、これまで統計処理と密接に絡む分野で発展してきたため、書籍といえば、統計処理の観点で書かれたものばかりであった。昨今、データを集合として眺めて特徴を捉えるという広い意味での統計処理が絡む分野は多種多様であり、様々な分野でRの応用が見られるようになってきたため、Rを一般のプログラミング言語として解説する書籍が必要だった。それが、本書を執筆する動機となった。
統計処理から一歩離れてRを眺めてみると、関数型言語の性質を多く取り入れたRの表現力の高さは、プログラミング言語としても素晴らしい魅力を持っている。また、実用的なオブジェクト指向により、Rのグラフィックスは情報を可視化するという行為において簡便さと自由度の高さを誇っている。
Rのプログラミングに関して、もう一言ここで書くと、Rは極めて実用的な関数型言語であるということである。関数型言語という理論的なバックグラウンドを持ちつつも、実用的に使いやすくするために、理論的な理想を追求しすぎないというバランスのとれた言語である。LISPのような性質を持ちながら、見かけはC言語のようにも見える言語である。
オブジェクト指向型言語全盛期にあって、関数型言語という言葉に馴染みがない方が多いかと思うが、プログラムがすべて数学的な意味での関数に近い形式で書ける言語を関数型言語と呼ぶ。数学的な意味での関数というのは、何か入力に対して出力を対応づける作用で、同じ入力に対しては常に同じ出力を対応づける作用のことを言う。そのような性質はプログラムだったら当たり前だと思う方もいるかもしれないが、関数の計算中に、入力以外に変化しうる「状態」が計算結果に影響を与えないとか、計算中に出力以外の「状態」に変化を与えないという特徴は、最近の主流の言語のスタイルとは異なる。
本書が、他のプログラミング言語を知っているが統計処理は専門ではない読者、統計処理の分野でRをますます活用していく上でRのプログラミングの知識を高めたい読者、Rのグラフィックスに興味のある読者にとって有用な書となることを切に願っている。
最後に、本書の執筆を支えてくれた家族へ感謝の気持ちを、そして原稿を辛抱強く待ってくれた九天社の沖山さんに感謝の気持ちを表して、このまえがきを終わろうと思う。
2007年2月
高階知巳
高階知巳
■ 目次
- 第1部 環境編
- 第1章 対話環境への招待:Rのエッセンス
- 1.1 対話の開始と終了
- 1.2 コマンドラインの操作
- 1.3 グラフ電卓から「こんにちは」世界まで
- 1.4 変数を定義しよう
- 1.5 関数を定義しよう
- 1.6 プログラム/データファイル/アドオンパッケージの読み込み
- 1.6.1 ディレクトリ関係の操作
- 1.6.2 プログラムの読み込み
- 1.6.3 データファイルの読み込み
- 1.6.4 アドオンパッケージの読み込み
- 1.7 ワークスペースとディレクトリ
- 1.7.1 ワークスペースとその操作
- 1.7.2 ワークスペースの保存と復帰
- 1.7.3 初期化関数と片付け関数
- 1.8 オブジェクトと対話
- 1.8.1 オブジェクト指向的な振る舞い
- 1.8.2 関数の定義を確認する
- 1.8.3 オブジェクトの詳細を確認する
- 1.9 対話環境の設定
- 1.9.1 関数で対話環境の設定を参照・変更したりする方法
- 1.9.2 Rの起動時に自動的に実行する内容を指定する方法
- 1.10 グラフィックス
- 1.11 まとめ
- 1.2 コマンドラインの操作
- 第2章 ドキュメンテーション
- 2.1 便利なオンラインヘルプ:見出し語から探す
- 2.2 例の実行
- 2.3 アドオンパッケージとドキュメント
- 2.4 オンラインヘルプの検索
- 2.2 例の実行
- 第3章 デバッグの方法
- 3.1 関数単位でのテスト
- 3.2 バグブラウザの使用
- 3.2.1 recoverによるデバッグ
- 3.2.2 dump.framesによるデバッグ
- 3.2.3 browserによるデバッグ
- 3.3 デバッグまとめ
- 3.2 バグブラウザの使用
- 第4章 バッチ処理
- 4.1 RのBATCHコマンドを使う方法
- 4.2 UNIX系シェルのヒアドキュメントを使う方法
- 第2部 プログラミング編
- 第5章 プログラミング
- 5.1 Rでプログラムするということ
- 5.2 Rのプログラムの形式
- 5.3 オブジェクトと変数
- 5.4 文とブロック
- 5.5 スコープ
- 5.5.1 関数レベルでのスコープ
- 5.5.2 パッケージレベルでのスコープ
- 5.2 Rのプログラムの形式
- 第6章 データ型
- 6.1 数値型(numeric)
- 6.1.1 無限大と非数値
- 6.2 整数型(integer)
- 6.3 論理型(logical)
- 6.3.1 欠損値
- 6.4 文字型(character)
- 6.5 因子型(factor)
- 6.6 複素数型(complex)
- 6.7 型テストと型変換
- 6.1.1 無限大と非数値
- 第7章 データの集合
- 7.1 ベクトル
- 7.1.1 cについて
- 7.2 行列
- 7.3 配列
- 7.4 リスト
- 7.5 データフレーム
- 7.6 要素の参照方法
- 7.6.1 単純参照
- 7.6.2 名前付き参照
- 7.6.3 集合参照
- 7.6.4 除外参照
- 7.6.5 条件付き参照
- 7.6.6 リストの要素の参照
- 7.7 データ構造の部分書き換え
- 7.8 データ構造の結合
- 7.9 異なるデータ構造間での変換
- 7.10 例題:家計簿
- 7.1.1 cについて
- 第8章 演算子
- 8.1 四則演算子
- 8.2 比較演算子
- 8.3 論理演算子
- 8.2 比較演算子
- 第9章 関数
- 9.1 関数型プログラミング
- 9.2 関数の定義
- 9.3 引数の順番と省略
- 9.4 複数の値を返したい場合
- 9.5 ローカル変数・関数
- 9.6 匿名関数
- 9.7 再帰呼び出し
- 9.8 まとめ
- 9.2 関数の定義
- 第10章 制御構造
- 10.1 ifによる場合分け
- 10.2 forによる繰り返し
- 10.3 breakとnextによる制御
- 10.4 whileとrepeatによる繰り返し
- 10.5 例題:ライフゲーム
- 10.2 forによる繰り返し
- 第11章 算術関数と文字列関数
- 11.1 算術関数
- 11.2 文字列関数
- 11.3 データ集合・統計の演算関数
- 11.2 文字列関数
- 第12章 ベクトル演算型プログラミング
- 12.1 forループを使う理由
- 12.2 マッピング
- 12.3 フィルタ
- 12.4 還元
- 12.5 apply系のバリエーション
- 12.6 関数のベクトル
- 12.7 例題1:画像の色表現の変換
- 12.8 例題2:信号処理
- 12.9 例題3:アンケート結果の集計
- 12.2 マッピング
- 第13章 例外処理
- 13.1 warning()による警告
- 13.2 stop()による停止
- 13.3 stopifnot()による検査
- 13.4 tryCatch()による明示的な復旧
- 13.5 関数型言語と例外処理
- 13.2 stop()による停止
- 第14章 入出力及びオペレーティングシステム
- 14.1 コネクション
- 14.2 表形式のデータの入出力
- 14.3 scan()による項目ごとの入力
- 14.4 readLines()による行ごとの入力
- 14.5 テキスト出力
- 14.6 バイナリデータの入出力
- 14.7 エンコーディングについて
- 14.8 パイプ
- 14.9 ファイル操作関数
- 14.10 ガーベージコレクション
- 14.11 時間
- 14.12 OSとのインタラクション
- 14.13 例題:grep
- 14.14 例題:表データから複数のファイルへの仕分け
- 14.2 表形式のデータの入出力
- 第15章 オブジェクト指向とクラス
- 15.1 Rにおけるオブジェクト指向の考え方
- 15.2 クラスの定義
- 15.3 メソッドの定義
- 15.4 型変換
- 15.5 例題:画像クラスの定義
- 15.6 Rにおけるオブジェクト指向の変遷
- 15.2 クラスの定義
- 第3部 グラフィックス編
- 第16章 グラフィックス基礎
- 16.1 グラフのカタログ
- 16.2 仮想デバイス
- 16.2.1 デバイスの操作
- 16.2.2 マルチページ対応
- 16.3 基本のプロット関数
- 16.3.1 plot()
- 16.3.2 legend()
- 16.3.3 points()
- 16.3.4 lines()
- 16.3.5 abline()
- 16.3.6 画像
- 16.4 高機能なプロット関数
- 16.4.1 棒グラフ
- 16.4.2 対散布図
- 16.4.3 円グラフ
- 16.5 その他の描画機能
- 16.5.1 タイトル
- 16.5.2 テキスト
- 16.5.3 矩形
- 16.5.4 多角形
- 16.5.5 スプライン曲線
- 16.2 仮想デバイス
- 第17章 グラフィックス応用
- 17.1 レイアウト
- 17.1.1 レイアウトパラメータ
- 17.1.2 複数プロットのレイアウト
- 17.2 画像の色の分析
- 17.3 3次元グラフィックス
- 17.3.1 トレリスにおける3次元グラフィックス
- 17.3.2 RGLによる3次元グラフィックス
- 17.1.1 レイアウトパラメータ
- 付録 Appendix
- 付録A パッケージの作り方
- A.1 パッケージ化の意義
- A.2 パッケージを作るための環境
- A.3 パッケージ作成の手順
- A.3.1 パッケージ・ディレクトリの作成
- A.3.2 Rファイルの準備
- A.3.3 外部言語ファイルの準備
- A.3.4 サンプルデータの準備
- A.3.5 ドキュメントの記述
- A.3.6 DESCRIPTIONファイルの記述
- A.3.7 NAMESPACEファイルの記述
- A.3.8 パッケージのチェック
- A.3.9 パッケージ・ファイルの作成
- A.4 外部言語インタフェース
- A.5 パッケージのインストール
- A.1 パッケージ化の意義
- 付録B Rの起動オプション
- 付録C 練習問題の解答
- C.1 第2章の練習問題
- C.2 第7章の練習問題
■ サポートサイト
http://web.mac.com/t_takashina/R-Program/
上記サイトより、本書に掲載されたサンプルプログラム等をダウンロードできます。