> 5 * 6
[1] 30
RとRStudio を用いてデータ分析を行う方法について説明する。 Rで命令を実行する方法として、まず、Console での対話型処理について 説明し、次に、一連の処理を行うときに便利な R スクリプトについて 説明する。最後に説明と命令をセットにしてレポート等に残す Rマークダウンについて説明する。
変数、代入、型、R スクリプト、R マークダウン
Rは統計解析のためのソフトウェアであり、無料でダウンロードして利用することができる。Windowsだけでなく、MacOSやLinuxといった多くのオペレーティングシステム (OS)上で動作する。 基本的な統計計算だけでなく、後から多様なパッケージを追加することができ、汎用性が高い。グラフなどの描画機能があり、解析するだけでなく、出てきた結果をグラフにすることができるといったメリットがある。有料のソフトウェアとは違って、サポートはなく利用は自己責任となるが、利用者も多いので、Webサイトや書籍が充実しており、何か動作で疑問があっても解決しやすいといった特徴がある。 RStudio IDE は R を利用する上で統合開発環境(IDE :Integrated Development Environment)である。 ファイルの作成や削除、過去に行った履歴の閲覧やグラフの作成、保存といった R を使う上で便利な機能を提供している。Rと同様に多くのOSで動作する。利用するOSによって、多少の違いはあるが、基本的な使い方は変わらない。この授業では RStudio を用いて R でデータ分析を行う方法について説明する。 RStudio には Webサーバー上で動かすためのソフトウェアとして RStudio Server もあるが、以降、RStudio というと RStudio IDE のことを意味するものとする。 これから説明する操作の中には、マウスなどによる GUI による操作もあるが、多くはキーボードによる文字入力で行う。そのため、不慣れな人には最初戸惑うかもしれないが、指示内容が1つ1つ記録されて残っているため、後から見直すことができるという利点もある。指示内容を1つ1つ理解して進めてもらいたい。
R で掛け算として\(5\times6\) を計算する場合には、 Console
のところで、5*6
と入力し、エンター(もしくは リターン) キーを入力する。すると、
> 5 * 6
[1] 30
と計算結果を返してくれる。「\(*\)」が掛け算を表す。 他にも「^
」はべき乗(\(5^3=5 \times5 \times5\)) を表す。
> 5 ^ 3
[1] 125
このように、Rはキーボードから命令を入力することができる 対話的なソフトウェアである。こうした四則演算の他にある文字に 具体的な数値などを割り当てることもできる。 例えば、\(x\)という文字に \(5\)という値を、\(y\)という文字に \(6\)という値を割り当て、その値について \(x \times y\)を計算すると次のように計算される。
> x <- 5
> y <- 6
> x * y
[1] 30
この \(x\) のことを変数、またはオブジェクトといい、 変数に値を割り当てることを代入という。 この「<-
」や先ほどの「+
」や「\(*\)」のように計算を表す 要素のことを演算子という。 演算子は1文字とは限らず、<-
のように2文字からなるものがある。そのときは <
と -
の間に スペースを入れないで利用する。
演算子 | 説明 |
---|---|
* |
掛け算 \(a\times b\) |
^ |
冪乗 \(a^b\) |
/ |
割り算 \(a/b\) |
%/% |
整数の商 |
%% |
整数の余り |
%*% |
行列の積 |
== | 等しいかどうか |
!= | 等しくないかどうか |
>= | 以上かどうか |
! | 否定 |
& | 論理積 |
先ほどは数値を代入する例を示したが、R の変数には 数値、文字列、論理値 などの型がある。 主なものとして
データの型 | 説明 | 例 |
---|---|---|
integer | 整数 | 1l |
double | 実数(倍精度浮動小数) | 3.4、5e-10 |
character | 文字列 | “A”,“B” |
logical | 論理値 | TRUE、FALSE |
といったものがある。変数がとるデータ構造も
型 | 名前 | 次元 | データ型の種類 |
---|---|---|---|
vector | ベクトル | 1次元 | 1種類 |
matrix | 行列 | 2次元 | 1種類 |
data.frame | データフレーム | 2次元 | 複数 |
list | リスト | 1次元 | 複数 |
などがある。 Rでは1つの値もベクトルとして扱われる。 値を代入する場合、事前に宣言しなくても R の方で自動的に判定する。演算においても型に応じて異なった振る舞いをする。 たとえば a+bi
と数値にi
があると複素数であると判定し、 複素数の積を計算する 。
> (3+4i)*(4-5i)
[1] 32+1i
また、3+a
のように文字と数値を掛け算するなど、適切でない演算を指示するとと エラーと表示される。
> 3 * "a"
変数の内容を表示するには変数名を打つ。また、 変数の型を見るには typeof(x)
とする。
> x <- 4+5
> x
[1] 9
> typeof(x)
[1] "double"
整数を入力しても小数として扱われる。あえて 整数であることを指定するには最後に L
をつける。
> x <- 4L+5L
> typeof(x)
[1] "integer"
代入作業を行うと RStudio の右上のEnvironment
に変数とその内容が表示される。 色々と作業していて、自分で設定した変数が何だったかわからなくなった場合もここで確認できる。 R では見やすいようにスペースを入れても、 適切に判断してくれる。字や括弧を含む場合には半角スペースを入れ見やすいように工夫する とよい。
> x <- 3
> y <- 2
> ( x + 1 ) * ( y + 2)
[1] 16
> x <- 3
> x < - 1
[1] FALSE
ただし、最後の例のように「<-
」はスペースを入れると違う意味と解釈されてしまう。この場合には 「x
が -1
より小さい」という条件が正しいかどうかという 意味であると解釈され、FALSE
という結果が表示されている。 これと同様にに、12
という数値を入れたい場合に1 2
と入力せずに、続けて入力する。 命令が長くなると 1 行で収まらないことがある。 その場合、「1 + 2
」と入力するところで、 「1 +
」を打った後で Enterキーを押すと、 プロンプト ではなく、+ と表示される。 これは、Rが式がまだ終了していないと判断していることを意味している。 一方で、 1
で Enterキーを押すと式が完結しているので 続けることができないので注意する。
> 1 +
+ 2
[1] 3
括弧「()
」や引用を表す ` や"
はセットとなって使うものがある。数が増えてくると間違えて しまうこともある。その場合は sape キー を押すと命令を途中でやめることができる。 四則演算だけでなく、三角関数や自然対数などの関数も用意されている。
> cos(pi)
[1] -1
複数の要素を持つベクトルデータを計算したい場合も ある。ベクトルを作成するには値を結合する「c()
」(combine、または concatenate)という 関数を使う(R ではスカラーも1つの要素のベクトルとして扱われる。)
> x <- c(1,2,3)
> x
[1] 1 2 3
> typeof(x)
[1] "double"
複数の要素を持つベクトルデータを結合することもできる。次の操作は先ほど作成した x
にさらに文字列 “a” を追加したデータを x
としている。またデータ構造を見るには str()
という関数を用いる
> x <- c(x,"a")
> x
[1] "1" "2" "3" "a"
> str(x)
chr [1:4] "1" "2" "3" "a"
> typeof(x)
[1] "character"
これを見ると、x
は数値のベクトルが "a"
を追加したことで 文字の集まりとして認識されていることがわかる。 最初は数値だけだったので、数値型のベクトルだったものが文字列の型に変わっている。このようにベクトルは複数の型を持った要素は認められない。 ベクトルで3個の要素のように特定の要素を抽出する場合には[]
で指定する。c()
で複数の要素を抽出することもできる。
> x[2]
> x[c(1,3)]
> x[3:4]
a:b
は a
からb
まで1つずつ増やすということを意味する。
R を終了するときには、quit()
(または q()
) と入力する。 すると、「作業スペースを保存するか?」と聞かれる。 保存する場合 (yes)、しない場合は (no)、キャンセルしてもとに戻る場合には (cancel)と入力する。 作業スペース(作業場)を保存すると今回行った処理の履歴が.Rhistory
という名前で残り、代入した変数の値などが .RData
という名前で保存され、 そのファイルを読み込むことで、続きから作業を行うことができる。
データ分析も進んでいくと一度の処理で終わるのではなく、 複数の処理を組み合わせて行うようになる。 その場合には一連の命令を書いてから一度に実行したい場合もある。 R では R スクリプトと呼ばれるファイルに一連の命令を書いておくことができる。 Rスクリプトを作成するには File
から New File
で R Script
を選ぶ。 または、File
の下にある の横にある ▼ のボタンを押しても同じことができる。 クリックすると、左上に小窓が現れる。小窓のタブには Untitled 1
と表示されている。この小窓は Windows におけるメモ帳に相当する 編集のためのアプリケーション(エディタという)であり、 ここに自由に文字を入力し ファイルを作成することができる。 この左上の小窓内をクリックし、 カーソル(| という形をしたもの)が点滅しているのを確認して、 文字を入力する。入力すると、タブの文字が 赤く表示され、 上部にあるフロッピーディスクのアイコンが濃く表示される。 この状態でフロッピーディスクのアイコンをクリックすると ファイルを保存することができる。 最初に保存するときには、エクスプローラー(Macでは Finder ) が表示され。ファイル名を入力することが求められる(新規保存)。 もし、一度保存している場合には、次からは上書き保存を意味する。
右上の小窓の Environment
タブの横にある History
タブ には履歴が表示されている。 この履歴をもとに必要な命令だけを R スクリプトにして保存することもできる。History
タブから選びたい命令をマウスで選択し、 上部にある To Source
ボタンをクリックする。 すると選択した部分が左上にあるエディタに貼り付けられる。 一通り命令を入力し、ファイルを保存したら、一連の命令を実行しよう。 Rスクリプトの上部にあるアイコンのうち、Source
ボタンを押すとスクリプトを実行することができる。また、スクリプトの一部をマウスで選んで、Run
コマンドをクリックすると、選んだ部分だけを実行することが できる。
スクリプトで行の先頭に #
と入力すると、その行は命令とは認識されない。 そこに書かれているものを コメント という。 一連の命令だけを書いたファイルでは後から読み直したときに何を分析したものか分からなくなってしまうことがある。 そこで、何をしているのかコメントとして残しておくとよい。 また、データの分析を行う上では、やり直した後にも同じ結果が出せるような再現性が求められる。そこで、一連の分析を行った後には、その作業をスクリプトとして残しておくことが望ましい。
R スクリプトを作成することで後から分析を再現することができる。 他の方法として、レポートを作成することもできる。 スクリプト作成と同様に、File
から New File
を表示し RMarkdown Document
を選ぶ。 すると作成するレポートのタイトルや著者、出力タイプを入力する画面が表示される (図1-1)。 好きなタイトルを書き(図では空欄)、出力のタイプはHTMLとする。
最初にサンプルが表示されている。
保存して、タブの表記がファイル名になっていることを確認したらKnit HTML
ボタンで HTML形式 (Hyper Text Markup Language) へと変換する。するとレポートのHTMLファイルが作成される。
図1-2 と 図1-3 を見比べてみると、 図1-2 でtitle:
と書いてある行は、 図1-3 では先頭に大きな文字で書かれたタイトルになっている。 また、 \(\#\#\)RMarkdownとなっているものは 他の文字に比べて大きく色も異なり 見出しになっていることがわかる。 R Markdown ファイルとはMarkdown と呼ばれる形式で 書かれたファイルのことである。 その形式で作ったファイルを knitr によってHTML形式に変換している。 Markdown 形式は Microsoft-Word のように WYSIWYG (What You See Is What You Get) ではなく、 文字を修飾するための命令にあたる文字も実際の文章と 同時に記す記法のことである。
次に図1-2 と図 1-3 における summary(cars)
という部分を 比較しててみよう。 図1-2 では``` { r cars} と ``` で囲まれた部分はグレーで表示されている。 ここには Rの命令を記載する。{r cars} の行の carsは囲まれた命令部分 (これをチャンクといい、 それぞれのチャンクに名前をつけることができ、 この部分のチャンクに cars という名前をつけると宣言している) に対する名前であり、つけておくと変換する際に間違いがあって エラーが起こったときなどにどこで間違えたのかがすぐにわかるというメリットがあるが、なくても自動的に Unnamed-chunk
という名前が つけられる。 また、summary(cars)
という命令は R にインストールされている cars
というデータに対して、要約を表示するという関数 summary
を 用いるという命令をしている。 実行結果が四角に囲まれて表示されている。R Markdown では この例に示すように、R を用いて、どのような命令を行うのかを 書いておく。これを knit とすることで命令と結果の両方を含む (含むかどうかはそれぞれオプションで指定できる) レポートを作成することができる。 Markdown とは HTML ような Markup言語とは異なり、 なるべく簡易な命令で済むような言語のことをいう。 主な命令は以下の通り。テキストでは文字は全角文字のように見えるが、 実際には半角文字で入力する。
R Markdown記法 | 説明 |
---|---|
# | 階層1。1つが章 |
## | 階層2。重ねるごとに階層が下がる |
$$ | TeX で数式を書く。 |
< URL > | リンク https://www.is.ouj.ac.jp |
[図タイトル](ファイル名) | 図 |
*\(\textvisiblespace \textvisiblespace \textvisiblespace \textvisiblespace\)a | 番号なし箇条書き(*の後にスペース4つ) |
1. 2. | 箇条書き(番号つき。 .の後にスペース ) |
最初は、サンプルをもとに必要な部分を書き換えてレポートを作成し、 一度うまく作成できたら今後はそのファイルを 新たなサンプルとして利用すれば良い。
chunkオプション | 説明 |
---|---|
include | レポートに表示するかどうか |
echo | 手順を表示するかどうか |
messsage | メッセージの表示 |
warning | 警告メッセージの表示 |
error | TRUEにするとエラー結果を表示 |
prompt | 命令に prompt(>)を表示 |
R と RStudio の基本操作について説明した。 持っているデータがどのようなデータかを確認した上で、様々なデータをRStudioを用いて分析をしていくのが今後の説明の流れである。 R についての本として 参考文献 [1] がある。 文字を入力する対話型のソフトウェアでは、コマンドを覚える必要があるため、最初の敷居は高く感じられるが、 表示のための余計な処理がない分、その分計算に負荷をかけることができる。 「何を計算しているのか分からないけれどコンピュータで計算したらこうなった。」というのではなく、1つ1つ命令と結果を確認しながら学ぶことで理解を深めていただければと思う。 また、Markdown について説明した。Markdown については 参考文献[2]、実践例として [3] に詳しい。
[1]. 松村優哉,湯谷啓明, 紀ノ定保礼,前田, 和寛, “改訂2版 RユーザのためのRStudio[実践]入門 : tidyverseによるモダンな分析フローの世界”,技術評論社,2021年
[2]. 高橋康介,“再現可能性のすゝめ –RStudio によるデータ解析とレポート作成”,共立出版,2018年
[3]. 江口哲史,石田基広,“自然科学研究のためのR入門 : 再現可能なレポート執筆実践”,共立出版,2018年
> x <- 2
> y <- 3
> z <- x * y
> z
2.次の場合にはどうなるか?
> x <- 2
> y <- 3
> z <- x * y
> y <- 4
> z
解答
\(6\)。
\(6\)。ここで、y <- 4
の後に、もう一度 z <- x*y
としてから、z
とすると\(8\)となる。