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問題の解答例(記号"#"から改行まではコメント文)。

このコードをコメント文に照らして見れば、先の例と同様「ループもカウンターも条件分岐もないのに同等の処理ができる」ことを利用して、題意に沿った論理が無理なく実装できているとわかる。ここでは「FizzSet」と「BuzzSet」が論理添字変数であり、これらによる、抽出・置換・論理積を利用している。

なお、付値記号の矢印は代入の向きを左右どちら向きにもできる。一般的には左向き矢印が推奨されているが、機能は変わらないので混乱のない限り可読性の向上に利用できる。以下では「計算 -> 新規変数」「抽出要素 <- 置換値」の意味づけで用いている。# FizzBuzz問題・R言語のコード# 1から100までの整数を、ベクトルで生成する。(n: 加工前の数列 ・ Ans: 加工後の結果用数列)1:100 -> n -> Ans# 3の倍数FizzSet相当のAns要素を、文字列"Fizz"に置き換える。(FizzSet: 3の倍数位置を示す論理ベクトル)Ans[n %% 3 == 0 -> FizzSet] <- "Fizz"# 5の倍数BuzzSet相当のAns要素を、文字列"Buzz"に置き換える。(BuzzSet: 5の倍数位置を示す論理ベクトル)Ans[n %% 5 == 0 -> BuzzSet] <- "Buzz"# 両倍数の共通集合相当のAns要素を、文字列"FizzBuzz"に置き換える。Ans[FizzSet & BuzzSet] <- "FizzBuzz"# 出力する。cat(Ans)

ベクトルの各種演算に加えて、行列の各種演算が可能である。

イテレーターとしての for をはじめ各種制御命令も充実しているので、ベクトルや行列の簡潔な処理では書けない制御や大型の計算も記述できる。
統計に適した解析環境

最小限の労力で見通しよく解析するために工夫された命令体系を備えている。

ベクトル、配列、
行列データフレーム(テーブルに相当)、リスト、時系列、などの動的型付けデータ型。(後出「データ型」参照)

高階関数(データとして関数を操作する関数)をベクトル処理として記述できる

名前付き引数プレースホルダー「 _ 」を利用できるネイティブパイプ演算子「 |> 」

『モデル式』の導入により、複雑な統計モデル記述と曲線あてはめ等のモデルフィット指示を簡潔で統一的に表現できる

欠損値(NA)・無効値(NULL)・無限大(Inf,-Inf)・非数値(NaN)などの定数とそれらの検査関数

集合計算・複素数計算・時間日付計算・因子計算

d(確率密度関数)・p(累積分布関数)・q(分位関数)・r(乱数生成)の4機能と分布名を組合せる命名規則を持つ多次元確率分布機能関数[4]

rep、seq、sequence、seq.Date、seq.POSIXt、combn、expand.grid、replicate、などベクトルシーケンスの規則生成関数群

mean, sum, cumsum, cumprod, rowMeans, table、などの集約関数群

apply, lapply, by, などの汎関数群や、Reduce, Map, Filter、などの高水準関数群

sample関数による数値・複素数・文字列などの加重標本抽出(サンプリング)記述

オブジェクト指向(関数・代入式もオブジェクト)(「オブジェクト指向」を参照のこと)

単純な構文・データ型宣言不要名前空間(「仕様」を参照のこと)


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

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