1 前提知識
- ここに出てくる用語は初学者にとってなじみがないものばかりかもしれないが,Rでなるべくがんばらず(人力に頼らず)にデータ加工をできるようになるためには避けて通れない
- これ以降はここで解説した用語を説明なしに解説に使うので,分からない言葉に出くわしたらここに戻ってこよう
1.1 RStudioの使い方
1.1.2 見た目の変更
- 好みまたは目に優しい画面にするため,RStudioの色合いを下記から変更できる
- メニューの
Tools > Global Options > Appearance > Editor theme
から選び,OKを押す(Figure1.2) - 筆者は
Tommorow Night Bright
を使用 - 以下の説明は変更後の画面で示す
- メニューの
1.1.3 コードの実行の仕方
- コンソールに直接コードを入力し出力を確認できる(Figure1.3)
- ちょっとした確認には便利だが,たくさん書きたい時や,内容を保存したい時は不向き
- R Scriptに書くと,たくさん書けるし保存も簡単でおすすめ。色分けもされる
- 慣れたらR Markdownを使うとhtmlレポートにまとめやすくなりもっと便利になる
- Figure1.4の左上の〇で囲んである緑
+
がついているアイコンから,またはFile > New file > R Script
でR Scriptを開く
- R Scriptを開くとデフォルトでは左上にウィンドウ(ペインと呼ばれる)が開き,ここにコードを記述できる(Figure1.5)
1.1.4 Windowsユーザーにつきものの文字化け対策
- Windowsだけの問題かもしれず,今後はもしかしたら不要になっていくかもしれないが,Windows10以前の場合,RStudio上で文字コードをUTF-8に指定しておく方が文字化けに悩まなくてすみそう
- メニューの
Tools > Global Options > Code > Saving > Default text encoding
からUTF-8選び,OKを押す(Figure1.6) - 同様に
Tools > Project Options > Code Editing > Text encoding
のところもUTF-8にしておく - 上記設定をした後で,他の環境で作られたR ScriptファイルやR Markdownファイルを開くときに文字化けする場合は,
File > Reopen with Encoding
からCP932(つまりShift-JIS)を選ぶとうまくいくかもしれない
1.2 本書に出てくるコード部分の見方
- グレーの背景部分はRのコードが書いてあり,その下の
##
で始まる部分は出力結果を表す
1 + 1
## [1] 2
- ここでは
1 + 1
がコード部分で,## [1] 2
が出力結果部分 -
[1]
というのは,その次にくる値(ここでは1つしかないが)が何番目にあるかを示している - たとえば,1から50までの数値を出力してみる
- コロン
:
で最初と最後の値をつなぐことで連番を表現できる
- コロン
1:50
## [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
## [26] 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
- コード部分に
#
で始まる文章がある場合は,コメントを表す。ここは実行されないので説明のために書かれる
# *(アスタリスク) は掛け算であることを示す
2 * 3 # ここにもコメントを入れられる
## [1] 6
1.3 パッケージ
- 様々な関数やデータなどがまとまっていて,読み込むと色々なことができる
- 逆にいえば読み込まないと便利な作業ができないことが多い
- 例えば
library(tidyverse)
またはrequire(tidyverse)
のように書くことで読み込める - パッケージを読み込まなくても,「
パッケージ名::関数名()
」でパッケージ内の関数が使える- どのパッケージの関数か明示するのにも便利なので,本書では多用する
- 以下,例えば「パッケージ
dplyr
の関数select()
」はdplyr::select()
と表現することがある
- モダンなRのデータ加工に必須なパッケージをまとめて読み込んでくれる
tidyverse
をまず読み込んでおく- 以降のコードはすべて
tidyverse
を読み込んだ前提で進める - 本書では明示しない限り,すべてtidyverseを読み込めば使えるパッケージを用いている
- 以降のコードはすべて
- インストールされているパッケージはRStudioのデフォルト画面で右下にあるウィンドウ(ペインと呼ぶ)のパッケージタブで確認可能
- 入っていないパッケージは,インターネットにつながっていれば以下の方法でインストールできる
- パッケージタブの
install
をクリックして出てくるウィンドウでパッケージ名を入力(Figure1.7) - コマンドから
install.packages("パッケージ名をここに入れる")
- パッケージタブの
1.4 関数
- データ加工においてほとんどの人は絶対お世話になるもの
- 適切な値や変数などを指定すれば,データの処理や計算,統計解析など様々な処理を簡単に実行してくれる
- データ加工の技術は,色々な便利関数をどの場面でどうやって使うかにつきる
- 例えば
mean()
などのように「関数名()
」で出てくるので,()
で囲まれてる所を見たらほぼ関数だと思えばよさそう- 本書の2章~6章はすべて基本関数の解説
-
()
の中に入る値を引数(ひきすう)と呼ぶ - 引数は「
,
」でつないで追加していき,これによって実行したい処理のカスタマイズが可能- 関数の
()
の最初の位置に来るものを第一引数という
- 関数の
- 関数の
()
内でtabキーを押せば,欲しいものが出てくることがある
1.4.1 関数の例
1.4.1.1 複数のものを1つにする: c()
-
ベクトルを作る(複数のものを1つにする)ための関数
- ベクトルと聞くと数学苦手だった人はいやな記憶を思い出すかもしれないが,Rではとにかく「複数のものを1つにしたもの」と理解しておけば何となると思う
-
c()
は慣れてる人は当たり前に使っているので,あまり解説されない気がするが,初学者にとってまず理解すべき最重要関数と思われる - ベクトルは,1.6)で解説するデータフレームでの列単位のデータを扱う際にも有用
c(1,2,3)
## [1] 1 2 3
c("a", "b", "c") # " "で囲まれる値は文字を表す
## [1] "a" "b" "c"
# 複数あるように見えるが実は1つのベクトルになっている例
1:10
## [1] 1 2 3 4 5 6 7 8 9 10
1.4.2 【応用編】関数を作る
- 一連の作業を,値を変えて繰り返したいときに役立つ
- 関数名は任意で名づけることができる
- 参考:Rの関数定義の基本(RjpWiki)
1.4.2.1 基本例:x + 1でxに入る数字を変えていって結果を出力する
- 「
自分で名づける関数名 <- function(引数){ 計算式やコード }
」 で関数を定義できる - 関数の引数に数値を入れたら,その数値に1を加算する関数を作成
- まずここでは,関数名として
add_one
と名付けたオブジェクトを作成 -
function()
の()内に,引数として入れる内容を指定する -
{}
内に処理したい式やコードを入れる - 作成した
add_one()
関数に引数を入れて実行する
- まずここでは,関数名として
add_one <-
function(x){
x + 1
}
add_one(1)
## [1] 2
add_one(2)
## [1] 3
1.4.2.2 無名関数(anonymous function)
- このあたりの内容は無名関数(または匿名関数)の記法でよく使われる,ラムダ式(lambda expression)と呼ばれることもある
- 関数名を定義しなくても実行できる。
{}
がなくても動く - 右端の部分の
()
に引数を入れることで実行できる
(function(x) x+1)(1)
## [1] 2
(function(x) x+1)(2)
## [1] 3
- R 4.1.0より,
function
を省略してバックスラッシュ\
で示せるようになった - purrr 1.0.0では,従来の
~
と.x
を使った記法から,無名関数の\(x)
とx
を使う書き方に移行した(参考:purrr 1.0.0 Docmentation)- これにより,本書で中心的に扱う繰り返し作業の記法もこれに対応する
(\(x) x+1)(1)
## [1] 2
1.5 オブジェクト
- Pythonなどの他言語では変数3と呼ばれるものに該当
- 計算の結果や,複数の数値や文字など(他にも色々)を1つの文字列に格納することができ,その後のコードで活用できる
-
<-
の矢印の先にあるのがオブジェクト。RStudioではショートカットalt + -
で出せる(MacはOption + -
) - この後説明するデータフレームもオブジェクトに入れられる
- データの少ないミニデータを作る時や,計算結果を格納するときに多用
1.6 データフレーム
- 行(別名:ケース;オブザベーション;レコード)と列(別名:変数;カラム)4が碁盤の目のようになった集まりの形のデータ
- データ解析において便利で分かりやすいため、本書ではデータフレームの形で説明していく
- Rのモダンな方法では,データの加工や統計処理のプロセスをデータフレームの形で返すことが多い
- 解析すべきデータがデータフレーム上に整えられているような状態をtidy(読み:タイディー,意味:整然)と呼び,データ解析において理想的な形とされている
- オブジェクトに格納することで,別のデータフレームを作れる
- 列単位で取り出すとベクトルになる
- 例:bill_length_mmは次のようなベクトルで表現できる c(39.1, 39.5, 40.3, NA …)
- 本書では,データフレームの中でも表示に便利なtibble形式を使う
- デフォルトでは最初の10行が表示されるが,本書では紙面の都合上,表示行数をしぼっている
1.6.1 本書で使う主なデータ例
1.6.1.1 ペンギンデータ
-
palmerpenguins
パッケージのpenguinsデータ(CC0)- 最初からtibble形式になっている
- データフレーム名を打ち込めばそのまま表示できる
- tibble形式でないデータフレームで大きなものに対して実行すると,Consoleの出力がうまって大変になることもある
# パッケージが入ってなければ下記実行
# install.packages("palmerpenguins")
palmerpenguins::penguins
## # A tibble: 344 × 8
## species island bill_length_mm bill_depth_mm flipper_length_mm
## <fct> <fct> <dbl> <dbl> <int>
## 1 Adelie Torgers… 39.1 18.7 181
## 2 Adelie Torgers… 39.5 17.4 186
## 3 Adelie Torgers… 40.3 18 195
## # ℹ 341 more rows
## # ℹ 3 more variables: body_mass_g <int>, sex <fct>, year <int>
- tibble形式のデータフレームの出力の見方
- 出力の最上段にある
A tibble: 344 x 8
で,tibble形式のデータフレーム,344行 × 8列という情報が分かる - 変数名の下の行にある
<fct>
,<dbl>
,<int>
は変数の型を示し,それぞれ因子型,数値型,整数型であることを示している。詳しくは5.3で説明する
- 出力の最上段にある
- より大きいデータフレームで情報が多い場合の出力例を次に示す
palmerpenguins::penguins_raw
## # A tibble: 344 × 17
## studyName `Sample Number` Species Region Island Stage
## <chr> <dbl> <chr> <chr> <chr> <chr>
## 1 PAL0708 1 Adelie Penguin (… Anvers Torge… Adul…
## 2 PAL0708 2 Adelie Penguin (… Anvers Torge… Adul…
## 3 PAL0708 3 Adelie Penguin (… Anvers Torge… Adul…
## # ℹ 341 more rows
## # ℹ 11 more variables: `Individual ID` <chr>,
## # `Clutch Completion` <chr>, `Date Egg` <date>,
## # `Culmen Length (mm)` <dbl>, `Culmen Depth (mm)` <dbl>,
## # `Flipper Length (mm)` <dbl>, `Body Mass (g)` <dbl>,
## # Sex <chr>, `Delta 15 N (o/oo)` <dbl>,
## # `Delta 13 C (o/oo)` <dbl>, Comments <chr>
-
tibble形式のデータフレームの出力の見方
-
Indiv…²
のように,長い変数名は…
と数字で省略して表示され,フルネームは脚注に数字に対応させて表示される - データフレーム下の1行目にある
… with 341 more rows, 9 more variables:
で,さらに341行と9列が非表示であることが分かる - 非表示になった変数名は
Date Egg <date>, Culmen Length (mm) <dbl>
のように最下部に表示される
-
本書では最初の3行の表示のみに絞っているが,出力されるデータフレームの実行結果はデフォルトで10行表示される。任意の行数を表示させたい場合は,
print()
関数を使う例:最初の15行のみ表示させる
## # A tibble: 344 × 8
## species island bill_length_mm bill_depth_mm flipper_length_mm
## <fct> <fct> <dbl> <dbl> <int>
## 1 Adelie Torger… 39.1 18.7 181
## 2 Adelie Torger… 39.5 17.4 186
## 3 Adelie Torger… 40.3 18 195
## 4 Adelie Torger… NA NA NA
## 5 Adelie Torger… 36.7 19.3 193
## 6 Adelie Torger… 39.3 20.6 190
## 7 Adelie Torger… 38.9 17.8 181
## 8 Adelie Torger… 39.2 19.6 195
## 9 Adelie Torger… 34.1 18.1 193
## 10 Adelie Torger… 42 20.2 190
## 11 Adelie Torger… 37.8 17.1 186
## 12 Adelie Torger… 37.8 17.3 180
## 13 Adelie Torger… 41.1 17.6 182
## 14 Adelie Torger… 38.6 21.2 191
## 15 Adelie Torger… 34.6 21.1 198
## # ℹ 329 more rows
## # ℹ 3 more variables: body_mass_g <int>, sex <fct>, year <int>
1.7 |>または%>%(パイプ演算子)
- 名前はパイプで発音は”and then” (参照)
- コードを読みやすくするための便利な機能を持つ演算子。初めてみた人は全然わからないと思うが,この本を読んでコードを書きはじめてみたらこれなしではいられなくなるくらいお世話になると思う
- 主に使用が想定される場面でざっくりいうと,「このデータフレームに対して
|>
の後にある関数を適用する」という機能 - 具体的な使用法は2.2.1で解説
- 最近は特にパッケージを読み込まなくても使える
|>
(base pipe, native pipe)を使う説明が多くなった。-
%>%
(magrittr pipe)はtidyverse
パッケージを読み込めば使えて,こちらが必要になる特殊なケースもある
-
- 主に使用が想定される場面でざっくりいうと,「このデータフレームに対して
- RStudioのショートカットは
Ctrl + Shift + M
(MacはCmd + Shift + M
)。たぶん,RStudio以外でもこのショートカット押してしまうぐらい中毒性がある- 現時点ではRStudioのデフォルトのショートカットで出るのは
%>%
だが,|>
に切り替えたい場合は,RStudioのTools > Global Options > Code > Editing > use native pipe operator
にチェックを入れる
- 現時点ではRStudioのデフォルトのショートカットで出るのは
1.8 プロジェクト
- 本書の内容では使わなくても問題ないが,自身のデータを読み書きする際には非常に便利なので,解説しておく
- データを加工して解析する際に、1つのフォルダ(サブフォルダも含む)の中に関連するデータやコードなどをまとめておき、そのフォルダをプロジェクトと設定する
- これにより、ファイルの読み書きの際の場所指定をいちいち意識しないで作業できるようになる
- RStudio画面の右上にProject設定のメニューがある(Figure1.11)
-
Project (None) > New Project > Existing Directory
と選び,プロジェクトにしたいフォルダを設定する
-
1.9 困ったときは
- 関数の使い方,引数の入れ方は大抵忘れるので,ヘルプのexampleを見て思い出す場合が多い
- コンソールに「
?関数名
」のように入れて実行する(例:?rename)と右下ペインのHelpタブに情報が出てくる - 右下ペインのHelpタブで検索する(Figure1.12)
- コンソールに「
- チートシートを見る
- メニューの
Help > Cheat Sheets > Browse Cheat Sheets
から掲載サイトに行ける
- メニューの
- エラーメッセージを
" "
で囲んでググる(フレーズ検索) -
r-wakalangの
#r_beginners
チャンネルで質問する