第19章 Rプログラミング入門

Rによるプログラミングの基本として、

について解説します。

大雑把に言えば、Rではオブジェクトとしてデータを読み込み、関数によってオブジェクト(=データ)の処理や分析を行います。 パッケージによって様々な関数を追加することで、処理や分析の幅を広げます。

RStudioでは左(下)にコンソールが表示され、>の右側にコマンドを打ち込み、Enterを押すことで実行されます。

  • 本格的に分析する場合はRスクリプトを作成します。

19.1 関数

関数 (function) とは何かを入力すると、何かを出力するものです。 例えば、

print("Hello, World.")
## [1] "Hello, World."

というコードは、"Hello, World."という文字列をprint()という関数に入力し、その文字列を出力しています。

  • Rでは、関数は関数名()という形を取ります。
  • 入力するものを入力引数 (input argument) 、出力するものを出力引数 (output argument) と呼んだりします。

次のように、入力引数も出力引数も1つとは限りません。

rnorm(n = 10, mean = 0, sd = 1)
##  [1]  1.7066405 -0.3474542 -0.4101172 -0.9050072  0.1696397  0.9459050
##  [7] -0.4876401  0.9715409 -0.5236492  0.2906743

さて、この関数は何をしているのでしょうか。 Rでは、関数名の前に?をつけて実行することで、その関数のヘルプを見ることができます。

?rnorm

英語で関数の使い方が解説されていますが、rnorm(n = 10, mean = 0, sd = 1)は平均0、標準偏差1の(標準)正規分布に従う乱数を10個だけ生じさせています。

入力引数は=で明示的に指定する場合、どのような順番でも構いません。

rnorm(mean = 0, sd = 1, n = 10)

入力引数を明示的に指定しない場合、ヘルプにある順番で入力します。 以下の例は上述のものと同じです。

rnorm(10, 0, 1)

また、ヘルプでmean = 0, sd = 1のように書かれている場合、デフォルトが定められています。 実行者が入力引数を指定しない限り、デフォルト値が使用されます。 したがって、以下の例もこれまでと同じコードです。

rnorm(10)

19.1.1 総称関数*

総称関数 (generic function) とは、Rにおいて入力引数の種類に応じて挙動が変わる関数のことを指します。 例えば、summary()という関数はデータフレームが入力引数の場合には記述統計を表示しますが、回帰分析の結果の場合は回帰表を出力します。

総称関数のヘルプを見る場合は、以下のように、関数名に.をつけて入力引数の種類を書きます。

?summary.data.frame
?summary.lm

19.2 オブジェクト

Rでは<-でオブジェクトを作成することができます。 例えば、20個の正規分布に従う乱数をxという名前のオブジェクトとして作成します。

x <- rnorm(20)
  • RStudioでは<-はショートカットAlt + -で入力できます。

実際に、乱数がxに格納されていることが分かります。

x
##  [1] -0.24448528 -1.01045598 -1.07176279  0.50306777  0.06864481  1.14767049
##  [7] -0.55326431 -1.92359982 -0.35166403 -0.03385126 -1.05256739  1.85156501
## [13]  1.26057578  1.20295128 -0.38468532  1.07789085 -0.87582768  0.99626738
## [19] -0.79006758  0.52475273

RStudioの場合、右上のEnvironmentパネルに生成されたオブジェクトが表示されます。

オブジェクトを入力引数とすることも可能です。 xの平均と標準偏差を求めてみます。

mean(x)
## [1] 0.01705773
sd(x)
## [1] 1.012321

もちろん、出力引数を新しいオブジェクトにすることもできます。

x.mean <- mean(x)
x.mean
## [1] 0.01705773
  • オブジェクトの名前にはアルファベットと数字、._が使えます。
  • ただし、数字は最初の文字としては使えません。

オブジェクトは上書きすることもできます。

x.mean <- mean(rnorm(20))
x.mean
## [1] -0.1030766
  • 先ほどとは違う値に上書きされていることが分かります。

19.3 パッケージ

大雑把に言って、Rによるデータ分析はデータをオブジェクトとして読み込み、いろいろな関数で処理を行うことで実行します。

つまり、関数が重要なのですが、Rで標準に備わっている関数には限界があります。 そこで、様々な研究者が関数を作成し、それをまとめたものをパッケージとして公開しています。

  • 基本的に、CRANでパッケージは公開されます。
  • ライブラリやモジュールと呼んだりすることもあります。

19.3.1 CRANからのインストール

パッケージをインストールするには、install.packages()という関数にパッケージ名を入れて実行します。 試しに、Tidyverseという幅広く使われているパッケージをインストールしてみます。

install.packages("tidyverse")

"でパッケージ名を囲まないとエラーになります。

install.packages(tidyverse)
## Error in install.packages(tidyverse): object 'tidyverse' not found

RStudioの場合、Packagesパネル(デフォルトの場合は右下)の中にInstallというボタンがあり、

そこにパッケージ名を入力してインストールすることも可能です。

インストールしたパッケージに対して再びinstall.packages()を行うと、最新版にアップデートされます。

  • RStudioの場合、PackagesパネルにUpdateというボタンがあり、アップデートできるパッケージを自動検索してくれます。

19.3.2 GitHubからのインストール*

パッケージの開発版や一部のパッケージはGitHub上で公開されています。

GitHub上のパッケージをインストールする場合はdevtoolsというパッケージを使うので、まずはインストールと読み込みを行います。

install.packages("devtools")
library(devtools)

インストールにはinstall_github()を使いますが、入力はパッケージ名ではなくユーザー名/レポジトリ名となる点に注意してください。

19.3.3 パッケージの読み込み

パッケージはインストールしただけでは使用することはできず、library()で読み込む必要があります。

library(tidyverse)
  • この場合は"で囲む必要はありません。
  • インストールは一回で十分です。

RStudioであればPackagesパネルにインストール済みのパッケージ一覧があるので、パッケージ名をクリックすると含まれる関数一覧を見ることができます。

  • 同様のものはCRANでもpdf形式で見ることができます。
  • 一部のソフトウェアはJournal of Statistical Softwareなどで論文が公開されています。

19.3.4 tidyverseとは*

Tidyverseとは広義にはRにおけるデータ処理を行うためのパッケージを開発するプロジェクトであり、狭義にはそこで開発されたパッケージの一部を指します。 具体的には、

  • ggplot2
  • dplyr
  • tidyr
  • readr
  • purrr
  • tibble
  • stringr
  • forcats

になります。

パッケージとしてのtidyverseを読み込むことで、上記のパッケージを読み込んでいます。

なお、プロジェクト全体としては、上記のもの以外にも多くのパッケージが開発されています。