Rは統計計算とデータ可視化のためのプログラミング言語です。データマイニング、バイオインフォマティクス、データ分析、データサイエンスの分野で広く採用されています。[ 9 ]
R言語の中核部分は、再利用可能なコード、ドキュメント、サンプルデータを含む多数のソフトウェアパッケージによって拡張されています。最も人気のあるRパッケージのいくつかはtidyverseコレクションに含まれており、データの視覚化、変換、モデリングの機能を強化するとともに、プログラミングの容易さを向上させています(著者とユーザーによる)。[ 10 ]
R は、GNU General Public Licenseの下で配布されるフリーでオープンソースのソフトウェアです。[ 3 ] [ 11 ]この言語は主にC、Fortran、およびR 自体で実装されています。主要なオペレーティングシステム( Linux、MacOS、Microsoft Windowsを含む) 用のコンパイル済み実行ファイルが利用可能です。
その中核は、ネイティブのコマンドラインインターフェースを備えたインタプリタ型言語です。さらに、グラフィカルユーザーインターフェースとして複数のサードパーティ製アプリケーションが利用可能です。これらのアプリケーションには、 RStudio(統合開発環境)、 Jupyter(ノートブックインターフェース)、モバイルデバイス向けのTermuxやGoogle Colabなどがあります。 [ 12 ]
R は、オークランド大学で入門統計学を教えるためのプログラミング言語として、ロス・イハカ教授とロバート・ジェントルマン教授によって開発されました。[ 13 ]この言語はS プログラミング言語に影響を受けており、ほとんどの S プログラムは R で変更せずに実行できます。 [ 6 ]また、この言語はScheme のレキシカル スコープにも影響を受けており、ローカル変数を使用できます。[ 1 ]
言語の名前である R は、S 言語の後継であることと、著者である Ross と Robert の共通の頭文字であることの両方に由来しています。[ 14 ] 1993 年 8 月、 Ihaka と Gentleman は、データ アーカイブ Web サイトである StatLib に R のバイナリファイルを公開しました。[ 15 ]同時に、彼らはs-newsメーリング リストでその公開を発表しました。[ 16 ] 1997 年 12 月 5 日、バージョン 0.60 がリリースされ、R はGNU プロジェクトになりました。 [ 17 ] 2000 年 2 月 29 日、バージョン 1.0 がリリースされました。[ 18 ]

R パッケージは、R を拡張する関数、ドキュメント、およびデータの集合です。[ 19 ]例えば、パッケージはレポート機能 ( R Markdown、Quarto、[ 20 ] knitr、Sweaveなどのパッケージを使用) やさまざまな統計的手法 (線形、一般化線形および非線形モデリング、古典的な統計検定、空間分析、時系列分析、クラスタリングなど) を追加できます。パッケージのインストールと使用の容易さが、データ サイエンスにおける R 言語の採用に貢献しています。[ 21 ]
インストール後にRを起動するとすぐに利用できる基本パッケージは、プログラミング、計算、グラフィックス作成、基本的な算術演算、統計機能に必要な基本的かつ必須の構文とコマンドを提供します。[ 22 ]
一例として、R パッケージのtidyverseコレクションがあり、これは共通のAPIを提供するためにいくつかのサブパッケージをバンドルしています。このコレクションは、「 tidy データ」[ 23 ]へのアクセスと処理に関連するタスクに特化しています。tidyデータとは、各観測値に対して 1 行、各変数に対して 1 列を持つ2 次元テーブルに含まれるデータのことです。[ 24 ]
パッケージのインストールは一度だけ行われます。たとえば、tidyverseコレクションをインストールするには、次のようにします。[ 24 ]
> install.packages ( "tidyverse" )パッケージの関数、データ、およびドキュメントをロードするには、library()関数を呼び出します。tidyverse コレクションをロードするには、次のコードを実行できます。[ a ]
> # パッケージ名は引用符で囲むことができます> library ( "tidyverse " )> # ただし、パッケージ名は引用符なしでも使用できます> library ( tidyverse )包括的Rアーカイブネットワーク(CRAN)は、Rのソースコード、実行可能ファイル、ドキュメント、およびユーザー作成パッケージをホストするために、1997年にKurt HornikとFriedrich Leischによって設立されました。 [ 25 ] CRANの名称と範囲は、包括的TeXアーカイブネットワーク(CTAN)および包括的Perlアーカイブネットワーク(CPAN)に倣っています。[ 25 ] CRANは当初、ミラーサイトが3つと、貢献パッケージが12個しかありませんでした。[ 26 ] 2025年6月30日現在 90個のミラー[ 27 ]と22,390個の貢献パッケージがあります。[ 28 ]パッケージは、 R-Forge、Omegahat、GitHubなどのリポジトリでも入手可能です。[ 29 ] [ 30 ] [ 31 ]
CRAN Web サイトでガイダンスを提供するために、タスク ビューの領域には、特定のトピックに関連するパッケージが一覧表示されます。トピックの例としては、因果推論、金融、遺伝学、高性能コンピューティング、機械学習、医用画像処理、メタ分析、社会科学、空間統計などがあります。
Bioconductorプロジェクトは、ゲノムデータ解析、相補的DNA、マイクロアレイ、およびハイスループットシーケンス法のためのパッケージを提供しています。

Rソフトウェア開発を支援する主なグループは3つあります。
R Journalは、Rの利用と開発に関する短~中編の記事を掲載するオープンアクセス型の学術誌です

Rコミュニティは、多くのカンファレンスや対面式の交流会を開催しています。[ b ]これらのグループには以下が含まれます。
Twitterなどのソーシャルメディアサイトでは、ハッシュタグを#rstats使用してRコミュニティの最新情報を追跡できます。[ 33 ]
以下は「ハローワールド!」プログラムです。
> print ( "Hello, World!" ) [1] "Hello, World!"以下に、関数を使用した別のバージョンを示しますcat()。
> cat ( "Hello, World!" ) Hello, World!以下の例は、言語の基本的な構文とコマンドラインインターフェースの使用方法を示しています。[ c ]
Rでは、一般的に推奨される代入演算子は2文字の矢印です<-が、=場合によってはも使用できます。[ 34 ]
> x <- 1 : 6 # 現在の環境で数値ベクトルを作成します。> y <- x ^ 2 # 同様に、x の値に基づいてベクトルを作成します。> y # ベクトルの内容を表示します。[1] 1 4 9 16 25 36> z <- x + y # xとyの合計である新しいベクトルを作成します> z # zの内容を現在の環境に戻します。[1] 2 6 12 20 30 42> z_matrix <- matrix ( z , nrow = 3 ) # ベクトル z を 3x2 行列オブジェクトに変換する新しい行列を作成します> z_matrix [,1] [,2] [1,] 2 20 [2,] 6 30 [3,] 12 42> 2 * t ( z_matrix ) - 2 # 行列を転置し、各要素に 2 を掛け、 # 行列の各要素から 2 を減算し、 # 結果を端末に返します。 [,1] [,2] [,3] [1,] 2 10 22 [2,] 38 58 82# 転置された z_matrix のデータを含む新しいデータフレーム オブジェクトを作成します。行名は 'A' と 'B' です。> new_df <- data.frame ( t ( z_matrix ), row.names = c ( "A" , "B" )) > names ( new_df ) <- c ( "X" , "Y" , "Z" ) # new_df データフレームの列名を X、Y、Z に設定します。> new_df # 現在の結果を出力します。 XYZ A 2 6 12 B 20 30 42> new_df $ Z # Z列を出力[1] 12 42> new_df $ Z == new_df [ 'Z' ] && new_df [ 3 ] == new_df $ Z # データフレームの列 Z には、$Z、['Z']、または [3] の構文を使用してアクセスでき、値は同じです。[1] TRUE> attributes ( new_df ) # new_df データフレームの属性に関する情報を出力します$names [1] "X" "Y" "Z"$row.names [1] "A" "B"$class [1] "データフレーム"> attributes ( new_df ) $ row.names <- c ( "one" , "two" ) # row.names属性にアクセスして変更します。これはrownames()関数を使用しても実行できます。> new_df XYZ one 2 6 12 two 20 30 42Rでは、新しい機能を追加し、コードの再利用を可能にする関数を作成できます。 [ 35 ] 関数本体内で作成されたオブジェクト(中括弧で囲まれています) は、関数内からのみアクセス可能であり、任意のデータ型を返すことができます。R では、ほとんどすべての関数とすべてのユーザー定義関数はクロージャです。[ 36 ]
以下は、算術計算を実行する関数を作成する例です。
# 関数の入力パラメータは x と y です。# f という名前の関数は、x と y の線形結合を返します。f <- function ( x , y ) { z <- 3 * x + 4 * y }# 明示的な return() 文は省略可能です。この場合は単に `z` に置き換えることができます。return ( z ) }# 代替案として、関数内で最後に実行されたステートメントが暗黙的に返されます。f <- function ( x , y ) 3 * x + 4 * y以下は、上記で定義した関数を使用した際の出力例です。
> f ( 1 , 2 ) # 3 * 1 + 4 * 2 = 3 + 8 [1] 11> f ( c ( 1 , 2 , 3 ), c ( 5 , 3 , 4 )) # 要素ごとの計算[1] 23 18 25> f ( 1 : 3 , 4 ) # f(c(1, 2, 3), c(4, 4, 4)) と同等[1] 19 22 25関数を中置演算子として使用するには、特別な構文 `name` を使用します`%name%`。ここで `name` は関数変数名です。
> `%sumx2y2%` <- function ( e1 , e2 ) { e1 ^ 2 + e2 ^ 2 } > 1 : 3 %sumx2y2% - ( 1 : 3 ) [1] 2 8 18R バージョン 4.1.0 以降、関数は短い表記法 (ラムダ計算に触発されたもの) で記述できるようになり、匿名関数を高階関数に渡すのに便利です。[ 37 ]
> sapply ( 1 : 5 , \ ( i ) i ^ 2 ) # ここで \(i) は function(i) と同じです[1] 1 4 9 16 25R バージョン 4.1.0 では、ネイティブのパイプ演算子, |>, が導入されました。[ 38 ]この演算子を使用すると、ネストされた関数呼び出しを使用する代わりに、関数を連結できます。
> nrow ( subset ( mtcars , cyl == 4 )) # パイプ文字なしでネスト[1] 11> mtcars |> subset ( cyl == 4 ) |> nrow () # パイプ文字を使用[1] 11ネストされた関数の代替手段として、パイプ演算子ではなく中間オブジェクトを使用する方法があります。
> mtcars_subset_rows <- subset ( mtcars , cyl == 4 ) > num_mtcars_subset <- nrow ( mtcars_subset_rows ) > print ( num_mtcars_subset ) [1] 11パイプ演算子は読みやすいコードを生成できますが、ハドリー・ウィッカムのような影響力のあるRプログラマーは、コードの難読化を避けるために、この演算子を使用して最大10~15行のコードを連結し、意味のある名前のオブジェクトに保存することを推奨しています。[ 39 ]
R 言語はオブジェクト指向プログラミングをネイティブにサポートしています。ネイティブフレームワークはS3 システムと S4 システムと呼ばれる 2 つあります。前者はより非公式で、最初の引数に対する単一ディスパッチをサポートし、オブジェクトは各オブジェクトに「class」属性を設定するだけでクラスに割り当てられます。後者はCommon Lisp Object System (CLOS)のようなシステムで、形式クラス (これもSから派生) と汎用メソッドを持ち、多重ディスパッチと多重継承をサポートしています[ 40 ]
以下の例では、引数が数値ベクトルか因子かに応じて異なるメソッドにディスパッチする汎用関数summary()です。
> data <- c ( "a" , "b" , "c" , "a" , NA ) > summary ( data ) Length Class Mode 5 character character > summary ( as.factor ( data )) abc NA's 2 1 1 1
plot.lm()。左下のプロットに示すように、ラベルには数式を使用できます。R言語には、データモデリングとグラフィックスのための組み込みサポートが備わっています。以下の例は、Rを使って残差を含む線形モデルを生成し、グラフ化する方法を示しています。
# xとyの値を作成するx <- 1 : 6 y <- x ^ 2# 線形回帰モデル: y = A + B * x model <- lm ( y ~ x )# モデルの概要を詳細に表示します(モデル)# 図の 2 x 2 レイアウトを作成しますpar ( mfrow = c ( 2 , 2 ))# モデルの診断プロットを出力しますplot ( model )summary()前述のコードブロック内の関数の出力は以下のとおりです。
残差: 1 2 3 4 5 6 7 8 9 10 3.3333 -0.6667 -2.6667 -2.6667 -0.6667 3.3333係数: 推定値 標準誤差 t値 Pr(>|t|) (切片) -9.3333 2.8441 -3.282 0.030453 * x 7.0000 0.7303 9.585 0.000662 *** ---有意水準コード: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1残差標準誤差: 自由度4で3.055、多重R二乗: 0.9583、調整済みR二乗: 0.9478、F統計量: 自由度1と4で91.88、p値: 0.000662
このマンデルブロ集合の例は、複素数の使用を強調しています。これは、方程式の最初の 20回の反復をモデル化したものであり、ここで は異なる複素定数を表します。z = z2 + cc
このサンプルコードを実行するには、まず以下の機能を提供するパッケージをインストールする必要がありますwrite.gif()。
install.packages ( "caTools" )サンプルコードは以下のとおりです。
ライブラリ( caTools )jet.colors <- colorRampPalette ( c ( "green" , "pink" , "#007FFF" , "cyan" , "#7FFF7F" , "white" , "#FF7F00" , "red" , "#7F0000" ))dx <- 1500 # 幅を定義dy <- 1400 # 高さを定義C <- complex ( real = rep ( seq ( -2.2 , 1.0 , length.out = dx ), each = dy ), imag = rep ( seq ( -1.2 , 1.2 , length.out = dy ), times = dx ) )# 複素数の行列として再形成するC <- matrix ( C , dy , dx )# 出力3D配列を初期化するX <- array ( 0 , c ( dy , dx , 20 ))Z <- 0# 20 回繰り返すループfor ( k in 1 : 20 ) {# 中心差分方程式Z <- Z ^ 2 + C# 結果をキャプチャするX [, , k ] <- exp ( - abs ( Z )) }write.gif ( X , "Mandelbrot.gif" , col = jet.colors , delay = 100 )
R のバージョン 2.14.0 以降のリリースはすべて、ピーナッツのコミックや映画にちなんだコードネームが付けられています。[ 41 ] [ 42 ] [ 43 ]
2018年、Rのコア開発者であるピーター・ダルガードは、 1997年以降のRのリリース履歴を発表しました。[ 44 ]注目すべき初期のリリースには、以下のようなものがあります。
R のバージョンリリースに名前を付けるというアイデアは、DebianやUbuntu のバージョンの命名システムに触発されたものです。ダルガードは、R のコード名にピーナッツの言及を使用するもう 1 つの理由として、「統計学に携わる人は皆ピーナッツだ」というユーモラスな観察を挙げています。 [ 44 ]
Rにはデフォルトでコマンドラインコンソールが付属していますが、この言語とやり取りする方法は複数あります。
Rの主要な実装は、主にC、Fortran、およびR自体で記述されています。その他の実装には、以下のものがあります。
Microsoft R Open (MRO) は R の実装でした。2021 年 6 月 30 日現在、Microsoft は CRAN ディストリビューションを優先して MRO の段階的廃止を開始しました。[ 50 ]
Rはオープンソースプロジェクトですが、一部の企業は商用サポートを提供しています。
私たちは、オークランドで入門統計学コースを教えるのに十分な言語を開発するという目標を設定しました。
R 言語および関連ソフトウェアは、データサイエンスのためのコンピューティングにおいて重要な役割を果たしています。 ... R パッケージは、幅広い目的とユーザーのためのツールを提供します。