本資料はデータ分析勉強会 で使用した「RStudioのすゝめ」の講義資料を再整理したものです。
 

はじめに

R の基本は他の言語と同じですが、R特有の部分もあります。「Rの一番良いところは統計学者が作っているところだ。 Rの一番悪いところは統計学者が作っているところだ。(出典)」と言われることが多いようですが、その特徴はなんといっても統計処理に特化している点です。この特徴によりデータ構造の変換や特定の分析に対する数々のパッケージが用意され、さらにコマンド一つでグラフが描ける高度なグラフィクス、更には分析結果をレポーティングするための仕組みも用意されています。このような点が他の言語と大きく異る点だと思います。

R を学ぶ際には統計知識は最低限必要ですが基本的なプログラミングのマスターにはどちらかというと統計の知識よりは R が得意とするベクトル処理を理解するのが一番のポイントだと思います。 R 単体ではエディタが貧弱ですが RStudio という統合開発環境(IDE)を用いればコーディング自体をサポートしてくれますし、より便利に使うための様々なパッケージが用意されていますので恐れる必要はありません。気軽に R の世界に触れて見ましょう。
 

基本的な関数

追加パッケージなしでも使える R の基本的な関数を R Commander のメニューを元に見ていきましょう。
 

統計量

統計量や主な数学関数はBase Rと呼ばれるbaseパッケージやstatsパッケージに用意されています。

baseパッケージ

関数名 説明 備考
abs 絶対値
cos 三角関数(コサイン) 余弦
exp 指数関数 ネイピア数 \(e^x=\exp(x)\)
log 対数関数(自然対数) ネイピア数 \(e=\exp(1)\) を底とする
log10 対数関数(常用対数) 整数\(10\)を底とする
log1p 対数関数 \(log(1+x)\), |\(x\)| \(\ll 1\)
log2 対数関数(二進対数) 整数\(2\)を底とする
mean 平均値(\(\bar{x}\) 算術平均
max 最大値
min 最小値
pi 円周率(\(\pi\)
range 範囲(最小値、最大値)
sin 三角関数(サイン) 正弦
sqrt ルート(\(\sqrt[2]{x}\)
sum 合計値
summary データフレームのサマリー
tan 三角関数(タンジェント) 正接

statsパッケージ

関数名  説明 備考
fivenum 五数要約 四分位数とは異なる場合もあるので注意
IQR 四分位範囲
median 中央値
quantile 四分位数 計算方法は9種類から指定可能
sd 標準偏差 不変分散から計算される標準偏差
var 分散 不偏分散(標本分散の関数はない)

 

グラフ

基本的なグラフィック関数はgraphicsパッケージで提供されています。特にgraphics::plot関数は引数を変えることで様々なグラフを描画することができます。

関数名  説明 備考
boxplot 箱ひげ図の描画
plot 様々なグラフの描画 データに応じたグラフを描く

 

モデル

基本的な分析モデルはstatsパッケージで提供されています。その他、様々な分析モデル用の関数はパッケージとして提供されていますので、必要に応じてパッケージをインストールして下さい。

statsパッケージ

関数名  説明 備考
glm 一般化線形モデル
lm 線形モデル 線形回帰

 

その他

その他、便利な関数としてはbaseパッケージやutilパッケージで提供される以下のような関数があります。

関数名 説明 備考
cut 階級の作成
floor 切り捨て
length データの長さを知る
levels 因子の水準を知る
pretty 階級幅の計算
rep 値の複製
round 数値の丸め 四捨五入ではなくIEC 60559による丸め
seq 規則的な数列の作成

utilsパッケージ

関数名 説明 備考
head データの先頭から任意の行だけ表示する 行数は指定可
tail データの末尾から任意の行だけ表示する 同上

 

パッケージを使う

R ではパッケージを追加することで様々な関数が使えるようになります。正規パッケージとも言える CRAN から提供されているパッケージ数は2017年7月の時点で1万を超えています。これらのパッケージを利用する場合は目的のパッケージをインストールする必要があります。インストール方法については パッケージのインストール をご覧下さい。提供されているパッケージの一覧は CRAN Packages で検索できます。一部日本語に翻訳された CRANパッケージ一覧 も公開されています。
 

CRAN Task Views

パッケージの開発分野については CRAN Task Views で確認することができます。こちらも一部日本語に翻訳された CRANタスクビュー も公開されています。代表的なタスクには以下のようなものがあります。

Task 内容
Bayesian ベイズ推論
Cluster クラスター分析
ExperimentalDesign 実験計画法
Finance ファイナンス
Graphics グラフィクス、可視化
HighPerformanceComputing 高性能並列処理
MachineLearning 機械学習
Multivariate 多変量統計
NaturalLanguageProcessing 自然言語処理
ReproducibleResearch 再現性のある分析
Spatial 空間データ
SpatioTemporal 時空間データ
Survival 生存時間解析
TimeSeries 時系列分析

 

パッケージの読み込み

インストールしたパッケージを利用するには以下の二つの方法があります。

  • パッケージを明示的に読み込む
  • パッケージ名を明示的に指定して関数を呼び出す

基本的には前者を使うのが何かと便利です。
 

パッケージを明示的に読み込む

パッケージを読み込むにはbase::library関数を使います。パッケージの検索順もオプションで明示的に指定することが可能です。

library(tidyverse)

 

もう一つの読み込み方

パッケージを読み込む関数にはbase::requireという関数もあります。この関数はパッケージを読み込む動作自体は同じですが指定したパッケージが既に読み込まれていた場合にはパッケージの読み込み動作を行いません。なので、自作関数内でのパッケージ呼び出しやR Notebook, R Markdownを利用する場合には便利な関数です。なお、base::library関数は常にパッケージの読み込みを行います。

require(tidyverse)

libraryrequireの違い

libraryrequireは厳密には以下のような違いがあります。

http://justdoit.hatenablog.jp/entry/2015/01/11/231208 https://mumu.jpn.ph/forest/computer/2016/05/04/3895/

if (!require('openxlsx')){
  install.packages('openxlsx')
}
## Loading required package: openxlsx
library('openxlsx')

 

パッケージ名を明示的に指定して関数を呼び出す

パッケージを読み込まなくてもパッケージで定義されている関数を利用するには以下のように記述します。関数が定義されているパッケージ名を明示的に指定することで直接パッケージから関数を呼び出します。

tidyverse::tidyverse_conflicts()

 

R では明示的に読み込み位置を指定しない限り最後に読み込んだパッケージからオブジェクト(関数や変数)を検索しますので、この呼び出し方法は複数のパッケージを読み込んだことにより関数がマスクされてしまっている場合で使えます。
例えばモダンなプログラミングで必須ともいえるdplyrパッケージにあるfilter関数は、基本パッケージstatsにある時系列フィルタリングを行うfilter関数をマスクしてしまいますので、stats:filter関数を使う場合は以下のように明示的にパッケージ名を指定して記述します。

library(dplyr)
filter(mtcars, cyl == 6)              # dplyrパッケージのfilter関数が呼び出される
stats::filter(c(1:100), rep(1, 3))    # statsパッケージのfilter関数を呼び出している
## Time Series:
## Start = 1 
## End = 100 
## Frequency = 1 
##   [1]  NA   6   9  12  15  18  21  24  27  30  33  36  39  42  45  48  51
##  [18]  54  57  60  63  66  69  72  75  78  81  84  87  90  93  96  99 102
##  [35] 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153
##  [52] 156 159 162 165 168 171 174 177 180 183 186 189 192 195 198 201 204
##  [69] 207 210 213 216 219 222 225 228 231 234 237 240 243 246 249 252 255
##  [86] 258 261 264 267 270 273 276 279 282 285 288 291 294 297  NA

 

また、あまり一般的でないパッケージで定義されているオブジェクト(関数や変数)を利用する場合、あえてこのような記述をすることにでコードの可読性向上につなげることも可能です。
 

パッケージの更新

追加でパッケージをインストールした場合は以下のコマンドを用いて定期的にパッケージを更新しておくことをおすゝめします。

update.packages()

 


Sampo Suzuki CC BY-NC-SA 4.0 , Sampo Suzuki [2019-05-10(JST)]