GNU R プログラミング入門のテキスト

[●テキスト本体（PDF形式126ページ:1.25MB）](http://www.k-techlabo.org/www_r/GNU_R.pdf)　2022/09/12更新
　（[→ミラーサイトからDL](https://ktechlabo.xsrv.jp/www_r/GNU_R.pdf)）（[→GitHubからDL](https://github.com/nkatsu2018/PubDoc/blob/master/R/GNU_R.pdf)）
　
－－－－－－－－－－－－－－－－－－－－－
(2022/08/27)
学校でプログラミング教えています．
プログラミング言語としての R を初心者に教えるための入門テキストを作りました．
既に何かの言語を習得している人が迅速にRに慣れるための入門書というスタンスです．

GNU R は統計処理業務，データサイエンスの世界では [Python](https://qiita.com/KatsunoriNakamura/items/b465b0cf05b1b7fd4975) と並ぶ標準的なプラットフォームですが，プログラミング言語としての R はとても個性的で，他の言語を経験した人にとって「学びにくさ」を感じさせる部分が多々あります．
それで，R 言語の最も基本的な事柄をできるだけコンパクトにまとめたくなり，このテキストを書きました．
作図機能に関しても最も基本的な「Traditional」の範疇の機能に限って解説しています．

まだまだ完成度が低い状態ですが，教育現場で使いならがテキストも修正・アップデートしてゆきます．
無料で公開しますので，ご意見いただけたら嬉しいです．
誤った箇所を見つけられましたら是非ご一報くださいませ．連絡先はテキスト裏表紙にあります．

[紹介ページ](http://www.k-techlabo.org/blog2/?page_id=1615)

特に学校でプログラミングや統計処理の指導をしておられる先生方に使っていただけたらと思います．現場から上がってきた要求やご指摘などいただけましたら幸いです．（可能な限りテキストに反映します）
本書の内容の範囲でしたらご質問も送っていただいて結構です．可能な限りということで対応いたします．

# 補足（更新に関すること，ご案内など）
－－－－－－－－－－－－－－－－－－－－－
【補足】(2022/09/12)
　cat関数に関する簡単な解説を載せました．
　print関数に関する解説の部分に加筆しました．
　
－－－－－－－－－－－－－－－－－－－－－
【補足】(2022/09/06)
　ご意見や修正箇所のご指摘（コメント欄）をいただきました @WolfMoon さん誠にありがとうございます．おかげさまでテキストがかなり良くなってきました．（まだぼちぼち加筆しています）
　
－－－－－－－－－－－－－－－－－－－－－
【補足】(2022/09/01)
　OSのコマンドの起動方法に関する簡単な説明を載せました．
　標準入力関連の機能（readline）について説明を載せました．
　否定の論理演算子「！」に関して追記．

－－－－－－－－－－－－－－－－－－－－－
【補足】(2022/08/30)
　ディレクトリやファイルの操作に関する解説を加えました．

－－－－－－－－－－－－－－－－－－－－－
# 目次
1　はじめに　---　1
　　1.1　Rの構成と起動方法　---　1
　　1.2　言語処理系の操作　---　1
　　　　1.2.1　テキストファイルに記述したプログラムを読み込んで実行する方法　---　2
　　　　1.2.2　カレントディレクトリの確認と変更　---　2
　　1.3　本書のサンプルプログラムの掲載の形式　---　3
　　1.4　式や文の記述　---　3
　　　　1.4.1　複数の行に渡る記述　---　3
　　　　1.4.2　複数の式や文を1行に記述する方法　---　3
　　　　1.4.3　コメントの記述　---　3
　　1.5　数値の扱い　---　4
　　　　1.5.1　算術演算　---　4
　　　　1.5.2　有効桁数の変更，丸めなどの処理　---　5
　　　　1.5.3　数学関数　---　6
2　Rプログラミング　---　8
　　2.1　データと変数　---　8
　　　　2.1.1　変数の管理　---　9
　　　　2.1.2　ベクトル　---　9
　　　　　　2.1.2.1　ベクトルの要素へのアクセス　---　9
　　　　　　2.1.2.2　ベクトルの演算　---　10
　　　　　　2.1.2.3　特殊な値　---　11
　　　　　　2.1.2.4　ベクトルの連結　---　12
　　　　　　2.1.2.5　ベクトルの長さ　---　12
　　　　　　2.1.2.6　数列の作成　---　12
　　　　　　2.1.2.7　ターミナル環境におけるベクトルの表示に関すること　---　13
　　　　　　2.1.2.8　値を繰り返して並べたベクトルの作成　---　13
　　　　　　2.1.2.9　データ型と要素数を指定してベクトルを作成する　---　14
　　　　　　2.1.2.10　ベクトルの要素に名前を与える　---　15
　　　　　　2.1.2.11　要素の含有検査　---　15
　　　　　　2.1.2.12　要素の位置の調査　---　16
　　　　　　2.1.2.13　要素の合計　---　16
　　　　　　2.1.2.14　全ての要素の積　---　16
　　　　　　2.1.2.15　要素の差分　---　16
　　　　　　2.1.2.16　要素の整列　---　16
　　　　　　2.1.2.17　要素の順序の反転　---　17
　　　　　　2.1.2.18　要素を一意に取り出す方法　---　17
　　　　　　2.1.2.19　要素の重複の検査　---　18
　　　　2.1.3　複素数　---　18
　　　　　　2.1.3.1　複素数の演算　---　19
　　　　　　2.1.3.2　共役複素数　---　19
　　　　　　2.1.3.3　複素数の絶対値　---　19
　　　　2.1.4　論理型　---　20
　　　　　　2.1.4.1　比較演算子　---　20
　　　　　　2.1.4.2　論理演算子　---　20
　　　　　　2.1.4.3　変数 T，F について　---　21
　　　　　　2.1.4.4　論理型ベクトルを用いた要素の抽出　---　22
　　　　　　2.1.4.5　「全て真」，「真を含む」の判定　---　22
　　　　　　2.1.4.6　数値などを論理型に変換する方法　---　23
　　　　2.1.5　raw型　---　23
　　　　2.1.6　文字列　---　24
　　　　　　2.1.6.1　文字列の連結　---　24
　　　　　　2.1.6.2　文字列の部分の取り出し　---　25
　　　　　　2.1.6.3　文字列の長さ（文字数）　---　25
　　　　　　2.1.6.4　文字列の分解　---　25
　　　　　　2.1.6.5　文字列からraw型ベクトルへの変換　---　26
　　　　　　2.1.6.6　raw型ベクトルから文字列への変換　---　27
　　　　　　2.1.6.7　文字コードと文字の対応　---　27
　　　　　　2.1.6.8　複数の行に渡る文字列の記述　---　27
　　　　　　2.1.6.9　文字列以外のオブジェクトを文字列に変換する方法　---　27
　　　　2.1.7　データの型に関すること　---　28
　　　　　　2.1.7.1　データの型の判定　---　28
　　　　　　2.1.7.2　データの型の変換　---　28
　　　　2.1.8　行列，配列　---　29
　　　　　　2.1.8.1　行，列へのアクセス　---　30
　　　　　　2.1.8.2　行列を直接編集するための便利な機能　---　31
　　　　　　2.1.8.3　行列の演算　---　31
　　　　　　2.1.8.4　行，列に名前を与える　---　32
　　　　　　2.1.8.5　配列　---　33
　　　　2.1.9　リスト　---　35
　　　　　　2.1.9.1　リストの作成　---　35
　　　　　　2.1.9.2　リストの要素へのアクセス　---　35
　　　　　　2.1.9.3　リストの長さ　---　36
　　　　　　2.1.9.4　リストの要素の削除　---　36
　　　　　　2.1.9.5　リストの連結，挿入　---　37
　　　　　　2.1.9.6　空リスト　---　37
　　　　　　2.1.9.7　再帰的なリスト構造　---　37
　　　　　　2.1.9.8　リストの要素に名前を与える　---　38
　　　　2.1.10　データフレーム　---　40
　　　　　　2.1.10.1　データフレームの作成　---　40
　　　　　　2.1.10.2　データフレームの要素へのアクセス　---　41
　　2.2　制御構造　---　42
　　　　2.2.1　反復(1)： for　---　42
　　　　　　2.2.1.1　様々なデータ構造に対する for　---　42
　　　　2.2.2　反復(2)： while　---　43
　　　　2.2.3　反復(3)： repeat　---　43
　　　　2.2.4　条件分岐(1)： if　---　44
　　　　　　2.2.4.1　複数の条件による分岐　---　44
　　　　2.2.5　条件分岐(2)： switch　---　45
　　　　　　2.2.5.1　自然数による分岐　---　45
　　　　　　2.2.5.2　文字列の値による分岐　---　45
　　2.3　入出力　---　47
　　　　2.3.1　sprintf関数による書式整形　---　47
　　　　　　2.3.1.1　書式指定について　---　47
　　　　2.3.2　CSVファイルへの出力(1)：　write.table　---　48
　　　　　　2.3.2.1　出力ファイルの行見出し，列見出しの有無の設定　---　49
　　　　　　2.3.2.2　出力内容の引用符の有無の設定　---　50
　　　　2.3.3　CSVファイルへの出力(2)：　write.csv　---　50
　　　　　　2.3.3.1　引用符，行見出しの有無の設定　---　50
　　　　2.3.4　CSVファイルからの入力(1)： read.table　---　51
　　　　2.3.5　CSVファイルからの入力(2)： read.csv　---　51
　　　　　　2.3.5.1　見出し行の無いCSVファイルの読み込み　---　52
　　　　2.3.6　テキストファイルの入力　---　52
　　　　　　2.3.6.1　日本語テキストの入力　---　53
　　　　　　2.3.6.2　テキストファイルから数値を読み込む方法　---　54
　　　　2.3.7　テキストファイルの出力　---　55
　　　　2.3.8　ファイル，ディレクトリに関する処理　---　56
　　　　　　2.3.8.1　カレントディレクトリの移動と確認　---　56
　　　　　　2.3.8.2　ファイル，ディレクトリの一覧　---　56
　　　　　　2.3.8.3　ファイル，ディレクトリの作成　---　56
　　　　　　2.3.8.4　ファイル，ディレクトリの存在の確認　---　57
　　　　　　2.3.8.5　ファイルの削除　---　57
　　2.4　関数の定義　---　58
　　　　2.4.1　関数の引数について　---　59
　　　　2.4.2　関数の内外で異なる変数の扱い（変数のスコープ）　---　60
　　　　2.4.3　引数の既定値の設定　---　61
　　　　2.4.4　不定個数の引数を取る関数の定義　---　61
　　　　2.4.5　名前付きの引数を実現する方法　---　63
　　2.5　オブジェクト指向プログラミング　---　65
　　　　2.5.1　S3オブジェクトシステム　---　65
　　　　　　2.5.1.1　関数定義のポリモーフィズムによるメソッドの実装　---　65
　　　　　　2.5.1.2　オブジェクトのクラスの定義　---　66
　　　　　　2.5.1.3　派生クラスの定義とメソッドの継承　---　67
　　　　2.5.2　S4オブジェクトシステム　---　68
　　　　　　2.5.2.1　クラスの定義とインスタンスの生成　---　68
　　　　　　2.5.2.2　メソッドの定義　---　70
　　　　　　2.5.2.3　派生クラスの定義とメソッドの継承　---　70
　　2.6　日付，時刻の扱い　---　73
　　　　2.6.1　基本的なクラス　---　73
　　　　　　2.6.1.1　difftimeクラス　---　74
　　　　2.6.2　タイムゾーン　---　75
　　　　2.6.3　日付，時刻の書式整形　---　75
　　　　2.6.4　日付，時刻から部分を取り出す方法　---　76
　　　　2.6.5　日付，時刻の系列を作成する方法　---　76
3　統計処理のための基本的な機能　---　78
　　3.1　乱数データの作成　---　78
　　　　3.1.1　乱数のseed　---　79
　　3.2　ランダムサンプリング　---　80
　　　　3.2.1　サンプルデータセット作成への応用　---　80
　　3.3　確率分布　---　81
　　3.4　要約統計量　---　83
　　　　3.4.1　データの個数，最小値，最大値，値の範囲　---　83
　　　　3.4.2　平均値，標準偏差，分散，中央値　---　83
　　　　3.4.3　分位数（クォンタイル）　---　84
　　3.5　質的データの集計　---　84
　　　　3.5.1　factorオブジェクト（因子オブジェクト）　---　85
　　　　3.5.2　orderedオブジェクト（順序付き因子オブジェクト）　---　86
　　3.6　度数分布　---　87
　　　　3.6.1　最頻値　---　88
4　データの可視化　---　89
　　4.1　最も基本的な可視化機能（Traditional）　---　89
　　　　4.1.1　グラフィクスデバイス　---　89
　　　　4.1.2　グラフのタイトル，軸ラベルの表示　---　90
　　　　4.1.3　プロットの点，線の指定　---　90
　　　　4.1.4　プロットの色の指定　---　92
　　　　4.1.5　座標軸と格子の表示　---　92
　　　　4.1.6　複数のプロットを作成する方法　---　93
　　　　　　4.1.6.1　split.screen による方法　---　95
　　　　　　4.1.6.2　複数のグラフを重ねて描画する方法　---　96
　　　　4.1.7　対数グラフ　---　98
　　　　4.1.8　ヒストグラム（度数分布図）　---　99
　　　　4.1.9　棒グラフ　---　100
　　　　　　4.1.9.1　横向きの棒グラフ　---　101
　　　　　　4.1.9.2　積み上げ形式の棒グラフ　---　102
　　　　4.1.10　円グラフ　---　103
　　　　4.1.11　箱ひげ図　---　104
　　　　4.1.12　多変数のプロット　---　105
　　　　　　4.1.12.1　ワイヤーフレーム　---　105
　　　　　　4.1.12.2　ヒートマップ　---　105
5　ターミナル環境，OSに関すること　---　108
　　5.1　標準入力からの入力　---　108
　　　　5.1.1　選択肢の入力　---　109
　　5.2　OSのコマンドを起動する方法　---　109
A　Rの入手先とインストール方法　---　110
B　Rの起動に関する事柄　---　110