R言語
[Wikipedia|▼Menu]

R言語R言語のロゴ
パラダイム関数型プログラミング、配列プログラミング、オブジェクト指向プログラミング命令型プログラミングリフレクション手続き型プログラミング 
登場時期1993年8月 (30年前) (1993-08)
設計者Ross Ihaka, Robert Gentleman
開発者R Development Core Team
最新リリース4.4.0 / 2024年4月24日[1]
型付け動的型付け
主な処理系GNU R
影響を受けた言語S言語Common LispScheme、XLispStat 
プラットフォームGNU/Linux*BSDmacOSMicrosoft WindowsUnix系 
ライセンスGPL 2.0 
ウェブサイトwww.r-project.org
テンプレートを表示

R言語(アールげんご)はオープンソースフリーソフトウェア統計解析向けのプログラミング言語及びその開発実行環境である。ファイル名拡張子は.r, .R, .RData, .rds, .rda。

R言語はニュージーランドオークランド大学のRoss IhakaとRobert Clifford Gentlemanにより作られた。現在ではR Development Core Team[注 1] によりメンテナンスと拡張がなされている。

R言語のソースコードは主にC言語FORTRAN、そしてRによって開発された。

なお、R言語の仕様を実装した処理系の呼称名はプロジェクトを支援するフリーソフトウェア財団によれば『GNU R』であるが[3] 、他の実装形態が存在しないために日本語での慣用的呼称に倣って、当記事では、仕様・実装を纏めて適宜にR言語や単にR等と呼ぶ。
特徴

R言語は文法的には、統計解析部分はAT&Tベル研究所が開発したS言語を参考としており、またデータ処理部分はSchemeの影響を受けている[注 2]
ベクトル処理言語

R言語は、「ベクトル処理」と呼ばれる実行機構により、柔軟な処理を簡便な記法で実現している。

R言語で言う「ベクトル」とは数学的用語のベクトルとはやや異なり「構造を持ったデータ集合」という「リスト」に近い意味を持つ。すなわち、実数複素数からなる数学上のベクトルや行列はもちろん、配列リストテーブル(データフレーム)・集合時系列などといった複雑な構造を持ったデータも、特に宣言することなく変数に入れられる。ベクトルの要素がさらにテーブルや時系列の配列などであるといった「入れ子構造」であってもよい。このおかげで複雑なデータ構造が他愛もなく構築・管理できる。

予約語としてRに組込まれた演算も、関数も、ベクトルを扱える。ユーザー定義関数をベクトル対応にするための関数もある。こうしたRの演算子やRの関数は、ベクトルの全要素に順に作用したり調べるといった構造にできている。そのおかげで、プログラム全体の制御構造が単純化して意味が明瞭になる。リストをうまく使うことによって、通常他の言語で複数要素を処理する時の「目的とする計算の本質とかけ離れたアルゴリズム」(たとえば、カウンターを使ったループ条件分岐等)の作成負担から解放される(他のプログラミング言語で似た記法を探すとすれば、たとえばLisp言語のmapcar関数、Perl言語のmap関数など)。

例として、円周率モンテカルロ法で近似する計算を挙げる[注 3]。s <- 100000x <- runif(s)y <- runif(s)sum(x^2 + y^2 <= 1) * 4 / s

ここで『 <- 』は代入(この場合『 = 』とも書けるが推奨はされていない)、『 runif(a) 』は一様乱数を a 個作りベクトルで返す関数、『 a^2 』は a の二乗、『 sum( a <= b) 』は引数のベクトル要素数を返す関数、を意味する。この場合sum関数の引数はTRUEまたはFALSEのリストからなる論理値型ベクトルである。ベクトルaおよびbの対応要素同士を比較演算子で比較した結果が並んでいるので、真であった個数が返る。

上の例で、sum関数によって、条件分け計算を複数回行なう指示が暗黙のうちになされていることに注目されたい。すなわち、0から1の値をとる一様乱数xとyの組からなる「サンプルを十万個作り、そのうち半径1の円内に入ったサンプルが何個かを数える。」という計算の本質を、forループのような繰返し処理の記述を必要とせず、簡潔に表現できている。

代入『 <- 』は「付値」と呼ばれる関数でもあり、以下のように一行に書き換えても意味は同じとなる。sum(runif(s <- 100000)^2 + runif(s)^2 <= 1) * 4 / s

論理値型ベクトルは数値計算の関数や演算子に渡すと数値「TRUE=1」「FALSE=0」と解釈される。上記の計算では、それを利用して集約関数の sum で合計を出している。

ベクトルは「論理添字(元のベクトルと要素数が等しい論理値型ベクトルを用いた添字指定)」を使うことで要素の絞り込みができ、そのベクトルに対して付値を行うと、絞り込んだ要素だけを別内容に置き換えることが可能になる。論理添字も変数に付値すれば複数の取り回しはさらに簡素化する。

Rの添字では数値ベクトルによる「数値添字」も利用でき、変数に付値もでき要素抽出にも不自由なく使えるが、「論理添字」の場合は複数を揃えて論理計算できるため、数値添字だけでは難しい複雑な抽出処理が制御も分岐も使わず明快に出来る。

添字ベクトルxの利用は基本的に、1次元ベクトル・テーブルでは『変数 [x]』のように記述して指示する。行列などでは次元数に適宜準じ指定添字次元だけが間引き対象になり、時系列やレコードの部分抽出などに利用される。


以下は論理添字同士の論理計算を利用したFizzBuzz問題の解答例(記号"#"から改行まではコメント文)。

このコードをコメント文に照らして見れば、先の例と同様「ループもカウンターも条件分岐もないのに同等の処理ができる」ことを利用して、題意に沿った論理が無理なく実装できているとわかる。


次ページ
記事の検索
おまかせリスト
▼オプションを表示
ブックマーク登録
mixiチェック!
Twitterに投稿
オプション/リンク一覧
話題のニュース
列車運行情報
暇つぶしWikipedia

Size:60 KB
出典: フリー百科事典『ウィキペディア(Wikipedia)
担当:undef