R言語
CRAN (The Comprehensive R Archive Network) からダウンロード・インストールすれば直ちにRを利用開始できる。動作環境はマルチプラットフォームに対応し、Windows・macOS・UNIX・Linuxで動作する。アップデートは精力的に継続され、ソースコードもCRANにて公開されている。
CRANはR資産の知識共有メカニズムともいえ、CRANによってRの機能は日々強化されている。R本体のみでも機能は潤沢だが、第一線ユーザ達の実務経験が反映した豊富なパッケージ群は、大きな助力となり得る。
パッケージのダウンロードは自由に手動でできるが、相互依存関係の解決やインストール・アップデート・ロード管理は人手で行なうとわずらわしいので、そのための機能を備えているRシステムに一元管理させるのが推奨される。パッケージの管理をR自体が行なうためには、あらかじめいずれかのCRANサイトを手元のRシステムに登録設定しておく必要がある。設定は一度行なえばよい。
なお、パッケージを用いなければ上記設定をしなくてもRを使うことはできる、また、オフラインのみでRを使用しても問題はない。パッケージが必要になった時に改めてCRANに接続するようにすればよい。
Rユーザー自身がパッケージを作成するためのツールキットが、標準パッケージとしてRに添付されている。
plot 関数によって多彩なプロットができる。 plot は総称的な関数であり、引数として渡されたデータの種類によって、自動的に様々なグラフを描き分ける。他にヒストグラムを描画する関数、イメージを描画する関数など高レベルの描画関数がある。これらはデフォルトでも機能するが、細かなパラメーターを指定することもできる。加えて、単に線を引いたり点を打ったりする低レベルの描画関数も用意されているため、好みのグラフを生成することができる。プロットは画面に対して行われるだけでなく、PDF・SVG・PS・PNGといった形式の出力を直接行うこともできる。
図にデフォルトでのプロット例を示す。上から順に plot(犬猫$種, 犬猫$性別) ・ plot(sin(seq(0, 2 *pi, 0.1))) ・ image(x <- -50:50, x, x %*% t(x)) の実行結果である。 seq 関数は等差級数からなるベクトルを生成する。 %*% は行列の積を計算する演算子、 t は転置行列を生成する関数である。最初の例では先に扱った動物種毎の性比を表示、次の例では、正弦関数(自動的にベクトルの添字が横軸となり、ベクトル生成式が縦軸のラベルとなっている)を表示し、最後の例では、引数を評価する中でベクトルを生成してxに代入し、積を計算し、その各要素の値を色の濃さで表現している。
R言語は、「ベクトル処理」と呼ばれる実行機構により、柔軟な処理を簡便な記法で実現している。
R言語で言う「ベクトル」とは数学的用語のベクトルとはやや異なり「構造を持ったデータ集合」という「リスト」に近い意味を持つ。すなわち、実数や複素数からなる数学上のベクトルや行列はもちろん、配列・リスト・テーブル(データフレーム)・集合・時系列などといった複雑な構造を持ったデータも、特に宣言することなく変数に入れることができる。 ベクトルの要素がさらにテーブルや時系列の配列などであるといった「入れ子構造」であってもよい。このおかげで複雑なデータ構造が他愛もなく構築・管理できる。
予約語としてRに組込まれた演算も、関数も、ベクトルを扱うことができる。ユーザー定義関数をベクトル対応にするための関数もある。こうしたRの演算子やRの関数は、ベクトルの全要素に順に作用したり調べるといった構造にできている。そのおかげで、プログラム全体の制御構造が単純化して意味が明瞭になる。リストをうまく使うことによって、通常他の言語で複数要素を処理する時の「目的とする計算の本質とかけ離れたアルゴリズム」(たとえば、カウンターを使ったループや条件分岐等)の作成負担から解放される(他のプログラミング言語で似た記法を探すとすれば、たとえばLisp言語のmapcar関数、Perl言語のmap関数など)。
例として、円周率をモンテカルロ法で近似する計算を挙げる。
マルチプラットフォーム・オープンソースで無償であるため誰もが同一作業環境を構築できる
「命令の文法が単純である」・「高水準な統計解析と視覚化機能・永続的な利用に耐える」などの理由で教育機関において統計学教育や統計処理を必要とする講義で利用し易いうえにプログラミングに手間取る事なく統計解析の教育・学習に専念できて解析のプロフェッショナルな道具であるので学習スキルは後々も実践で活かせる(「プログラムの入手」・「持続可能な統計環境」・「最近の展開」を参照のこと)
Rはマルチパラダイムなプログラミング言語である。広義の関数型言語の一つであるSchemeの影響を受けていて、リストを基本にした内部処理・遅延評価・静的スコープなどの特徴をもつ。インスタンス生成などオブジェクト指向機能ももっている。手続的な表記法にはCの影響がある。いわゆる「Hello, world」プログラムのコードと実行結果は以下とおり。