1 まずは使ってみる

このサイトに書かれていることを実行するためには,あなたのパソコンでRを使える環境を構築しなければなりません(ここでは,RというアプリケーションとR言語を区別することなく,Rと呼びます。区別する場合,前者を R.app と書くことがありますが,これはmacOSのファイル名に由来する慣習です)。 スマートフォンには対応していないため,必ずパソコンを使ってください。

1.1 環境構築

まず,The Comprehensive R Archive Network から自分のパソコンのOSに対応したファイルをダウンロードし,Rをインストールしてください。

The Comprehensive R Archive Network は,Googleなどで「CRAN」(読みは「シーラン」または「クラン」)と入力して検索すると,すぐに見つかるはずです。 あなたのパソコンのOSがWindowsなら「Download R for Windows」をクリックし,macOSなら「Download R for macOS」をクリックしてください。 Windowsの場合,次の画面で「base」をクリックするとインストーラをダウンロードするページが表示されるはずです。 macOSの場合,自分のMacのCPUがApple siliconかIntelかで,ダウンロードするファイルが異なります。 自分の環境(OSとCPU)に合ったファイルがダウンロードできたら,そのファイルを使ってRをインストールしてください。 Rの準備はこれだけです。

もしあなたのパソコンに古いバージョンのRがインストールされている場合は,必ず最新バージョンにアップデートしてください。 Rのバージョンは,Rを起動したときに表示されるメッセージで確認できます。 なお,Windowsの場合,新しいバージョンのRをインストールした後に,古いバージョンのRをアンインストールしてください。 macOSの場合は,古いバージョンのRは上書きされるため,わざわざアンインストールする必要はありません。

もしRStudioを使いたければ,インストールしても構いません。 最初にRStudioをインストールするように指示する書籍やウェブサイトがあると思います。 しかし,個人的にはRStudioの使用はおすすめしません。

RStudioが何をするためのものかを知ってからインストールしても遅くありませんので,Rに慣れてから,Rではできないことをするために,RStudioをインストールすることをおすすめします。 Rコマンダー等,他のソフトウェアもインストールする必要はありません。 Rで何ができるかGoogle検索した結果,Rに関連するソフトウェア(パッケージではなく)をインストール指示がするようあった場合は,それが何であるのかよく調べ,本当に必要であることが分かってから,インストールすることをおすすめします。 Rのパッケージは無条件にインストールして構いません。

1.2 基本操作

Rを起動すると,Rコンソールが現れます。 macOSの場合はRコンソールのみが表示され,Windowsの場合は全体のウィンドウの中の小さなウィンドウがRコンソールです。

Rコンソールは下から上に流れていき,一番下がコマンドを入力する場所です。 その場所に,> という記号が表示されているはずです。 > のことをプロンプトと呼びます。 ここにコマンドを入力するということを覚えてください。

ここで言うコマンドとは,Rへの命令のことであり,その実態は関数であることが多く,一連のコマンドはコードスクリプトとして表現されます。 これらの言葉の厳密な使い分けはできなくても問題ありません。

終了するときは,通常のアプリケーションと同じように終了してください。 ただし,Windowsでは「作業スペースを保存しますか?」,macOSでは「ワークスペースのイメージファイルを保存しますか?」と聞かれます。 聞かれたら,「いいえ」または「保存しない」を選択してください。

1.2.1 四則演算

さっそく,計算してみましょう。 プロンプトに続けて(プロンプトの右側に),次のように入力してください。

1 + 1

ここで改行については何も書いていないですが,文字列 1 + 1 を入力した後は,必ず Enterキー または Returnキー を押してください。 この操作のことを「実行する」と言います。

1 + 1 を実行すると,次のように表示されます。

## [1] 2

コマンドを実行した結果表示されるオブジェクトのことを,「返り値(かえりち)」と呼びます。 ここでは, 1 + 1 というコマンドの返り値が,2 であることが分かります。

それでは,2 の前に表示されている [1] は何でしょうか。 これは右に表示されている返り値が,ベクトルの何番目の要素であるかを示したものです(厳密には正しくないが,この理解で問題ない)。 2 はベクトルの1番目の要素(スカラーと言い換えられそうですが,スカラーではありません)に当たるため,1番目の 1[] の中に表示されます。 ここではベクトルを扱いませんが,実際にベクトルを扱うときにこのことを思い出してください。

四則演算は簡単に実行できます。 いくつか例を挙げますので,他に思いつくまま,いくつでも実行してみてください。 なお,実行する場合は,1行ずつ実行してください。 慣れてくると複数行まとめて実行しても問題ありません。

1 + 3
3 - 2
2 * 3
4 / 2

これらの返り値が期待通りかを確かめてください。 この例にあるように,かけ算は * で,割り算は / で表します。

これまでのように,四則演算の記号の前後にはスペースを入力してください。 例えば,次のようにスペースを入れなくても,正しい返り値が得られます。

2+5
3*1.5
6/4
10--2

ただし,スペースを入れないと,人間にとっては読みにくくなります。 プログラミングをする場合,人間にとって読みやすいかどうかは重要です。 このため,区切りとなる部分には必ずスペースを入れるように習慣づけてください。

2 + 5
3 * 1.5
6 / 4
10 - -2

最後の 10 - -2 は正しく計算できますが,より分かりやすくするために,10 - (-2) と書くようにしてください。 なお,マイナス符号の後にスペースを入れると見にくくなるため,入れないのが一般的です(スペースを入れても入れなくても,結果は変わりません)。

このように読みやすさを優先して,適宜スペースを入れるようにしてください(このページの記述方法は標準的なものです。記述方法をチェックするために,lintr パッケージやAir パッケージがあります。ここでは理解する必要はありません)。 どうすれば読みやすくなるかを判断する力は,Rコードを数多く読む中で自然に身についていきます。

計算の順番を先にする場合は,() で括ってください。

((2 * 3) + 3) / (2 * 1.5)

計算の順番を指定するのに,{}[] は使ってはいけません。 () は何回入れ子になっても構いません。

ここで,読者のみなさんにお伺いします。 ここまでで,このページに書かれていなかった計算を試してみたでしょうか。 例えば,次の計算結果はどう表示されるのだろうか,と疑問を持ち,確認したでしょうか。

0.2 * 5
1 / 3
10 / 0
0 / 10

プログラミングの学習に重要なのは好奇心です。 書かれていることをコピー&ペーストするだけでは,プログラミングスキルを修得するのはおそらく不可能でしょう。 自分で考えながら,書かれていること以上のことを学習していってください。 いろいろ計算してみたという方は,その調子で学習を進めていってください。 ある瞬間に突然理解が深まるはずです。 いろいろ計算してみなかったという方は,ぜひいろいろ計算してみてください。

1.2.2 オブジェクト

Rに値を記憶させるために,オブジェクト変数と呼んでも問題ない場合も多い)に値を代入すると便利です。 例えば,オブジェクト x に10を代入するには次のコマンドを実行します。

x <- 10

これは次のように書くこともできます。

x = 10

これらは同じ処理をしています。 ただし,R的な方法は前者の <- です。

オブジェクト x に値が入ったことは,次のようにして確認できます。

x

あるいは,次のコマンドでも同じ結果が得られます。

print(x)

オブジェクトに別の値を代入すると,オブジェクトの中身は上書きされます。 例えば,オブジェクト x に20を代入するどうなるかは,次のコードで確かめられます。 この場合,1行ずつ実行しても,2行をまとめて実行しても,どちらでも構いません。

x <- 20
x

x の中身が上書きされたことが分かります。

代入するものは値そのものでなくても,何らかの返り値を持つ数式でも構いません。 また,代入するオブジェクトの名前は x である必要はありません。 自分で自由に決められます。

hensuu <- 2 * 3

オブジェクトの中身を確認したければ,次のようにします。

hensuu

また,オブジェクトを使って新たな計算をすることもできます。

hensuu * 2

オブジェクト名は何でも構いません。 例えば,日本語でも大丈夫です。

オブジェクト <- 2 * 10

ただし,日本語のオブジェクト名は思わぬトラブルを招く原因になり得ますので,特別な理由がない限り,積極的には使わないことをおすすめします。

一方,数字で始まるオブジェクト名は使えません。 例えば,次のコマンドを実行するとエラーが返ってきます。

2 <- 3
2x <- 10 + 2 * b

アルファベットで始まるオブジェクト名にするよう心掛けてください。

なお,アルファベットを使う場合,大文字より小文字が望ましく,意味のある名前だと分かりやすいです。 オブジェクト名にはアルファベットと数字以外に _. を含めることもよくあります。 _ は英単語の区切りとして使うと便利です(例:newnames よりも new_names の方が分かりやすい)。 ただし,_ から始まるオブジェクト名はエラーになります。 _ を用いた文字はスネークケースと呼ばれます。

一方,. を用いた文字はドットケースと呼ばれます。 . は特別な理由がない限り,使わない方がよいです(例:new.names といったオブジェクト名は扱うことはできるが,避ける方が無難)。 . から始まるオブジェクト名は普通のオブジェクトではないため,使わないようにしてください。

作成したオブジェクトを削除する場合は,次のコマンドを実行します。

rm(x)

現在使っているオブジェクト名は次のコマンドを実行すると分かります。

ls()

また,ある特定のオブジェクトが存在するかどうかは,次のようにして確認できます。

x <- 100
exists("x")

いろいろなオブジェクトを作りすぎて混乱してしまうことがあります。 その場合,いったんRを終了して,再びRを起動すると,これまでRコンソールで作成したオブジェクトはすべてなくなります。 いったんRを終了したのとほぼ同じことは,次のコマンドでも実行できます。

rm(list = ls())

このコマンドは,オブジェクトだけでなく,後述する関数を含む(ほぼ)すべてのオブジェクトが削除されます。

1.2.2.1 Tips

. で始まるオブジェクト名は通常は作成しません。 このオブジェクトは他のオブジェクトと若干異なります。 例えば,次のようにしてみるとわかります。

.a <- 10
.a
ls()

.a という名前のオブジェクトが存在するはずですが,一覧には表示されません。 .a も含めて一覧を表示させるためには,次のようにします。

ls(all.names = TRUE)

または

ls(all = TRUE)

こういう特殊な動きをするため,. で始まるオブジェクト名は特別な理由がない限り使わないでください。

1.2.3 関数

先ほどのように文字の直後に () がくるオブジェクトを関数と呼びます。 関数には以下の特徴があります。

  • 関数は複雑な処理(複数行にわたるコード)をまとめて実行するためのものである。
  • 関数名と () の3つでひとかたまりである。
  • 関数に続く () の中には,関数のオプションとなる引数(ひきすう)を書く。
  • ?に続けて関数名だけを書くと,その関数のヘルプを参照することができる。
  • ()を付けずに,関数名だけを書くと,その関数の中身を見ることができる。この性質は関数が存在するかどうかを確認するために使います。

例を挙げましょう。 seq() は数列を生成する関数です。

x <- seq(from = 1, to = 10, by = 1)

このとき,from = 1, to = 10, by = 1 の部分が引数です。 この関数は,from から by ずつ to まで値を増やす数列を生成します。 実際に x の中身を確認してみましょう。

x
##  [1]  1  2  3  4  5  6  7  8  9 10

関数の引数の名前は省略できます。 例えば,上の記述は以下のように書いても同じです。

seq(1, 10, 1)

引数の値だけを書いた場合,どの引数の値であるかは「かっこ内でコンマによって区切られた順番」によって決まります。 例えば,seq(1)seq(from = 1) と同じ意味になり,seq(10, 1)seq(from = 10, to = 1) となります。

こうした引数の順番をどのようにして知ることができるでしょうか。 後述する関数のヘルプを参照すると,引数の順番を知ることができます。 また,関数のヘルプを参照すると,どのような引数が使えるかも分かります。 ただし,引数の名前は省略できるのですが,自明な場合を除いて,引数の名前は基本的に省略しないことをおすすめします。

ここで,上述した by = 1 のときの seq() は以下のように表記することもできます。

1:10

この場合,seq(1, 10) と同じ意味になります。 コロンを使った表記は特殊であり,他の関数にはこのような省略形はありません。 この形はそのまま覚えておきましょう。

これまでの知識を踏まえて,いろいろ試してください。 seq() の引数の値を変更すると,違う結果が得られることが想像できるはずです。 次のようにすると,x2x5 の中身がどうなるか想像し,実際に想像通りになるかを確かめてください。

x2 <- seq(from = 1, to = 100, by = 2)
x5 <- seq(from = 1, to = 100, by = 5)

一般的に,関数名は覚えなければなりません。 ある関数の使い方については,ヘルプを参照すると分かります。 ヘルプを参照するためには,次のように関数名の前に ? を書きます。

?seq

同じ結果は,次のようにしても得られます。

help(seq)

これは help という関数を使って,関数のヘルプを参照しています。

1.2.4 ベクトル

次のコードで作成されるオブジェクト x はベクトルです。

x <- seq(from = 1, to = 100, by = 2)

x の中には 50 個の値が入っており,順番にも意味があります。 このベクトルの2番目の要素は次のようにして取り出すことができます。

x[2]
## [1] 3

ベクトルの長さは次のようにして得ることができます。

length(x)
## [1] 50

このベクトルを用いて,いろいろな計算ができます。 合計を計算するには sum() を使います。

sum(x)
## [1] 2500

この関数 sum() はExcelの関数として使ったことがあるのではないでしょうか。 RとExcelでは共通した関数もあります。

平均は次のようにして計算します。

mean(x)
## [1] 50

こうした関数を数式の中に含めることもできます。

x - mean(x)
##  [1] -49 -47 -45 -43 -41 -39 -37 -35 -33 -31 -29 -27 -25 -23 -21 -19 -17 -15 -13
## [20] -11  -9  -7  -5  -3  -1   1   3   5   7   9  11  13  15  17  19  21  23  25
## [39]  27  29  31  33  35  37  39  41  43  45  47  49

上ではオブジェクト名は何でもよいとしましたが,すでに定義されている予約語は使用してはいけません。 次のコマンドを実行することで,予約語を知ることができます。

?reserved

予約語ではないオブジェクト名にするように心掛けましょう。

1.2.5 パッケージ

Rをインストールした素の状態で使用可能な関数は限られています。 RユーザーはRの使用に慣れてくると,有益な関数を自ら作成するようになります。 そして,それら自作の関数を他のユーザーにも使ってもらうために,共有されることもあります。 これらの共有された関数は,パッケージと呼ばれます。 パッケージはCRAN等に公開されており,誰でもそれらを自分のRにインストールすることができます。

1.2.5.1 パッケージのインストール

例えば,Microsoft Excelで作成されたファイルを効率的に読むことができる readxl パッケージを使う場合を考えます。 このパッケージを初めて使う場合のみ,自分のパソコンにパッケージをインストールする必要があります(Rのバージョンが変わったときにもパッケージをインストールする必要があります)。 以下のコマンドを実行すれば,目的のパッケージがインストールされます。

install.packages("readxl")

このコマンドは一度実行すれば,Rを終了しても,また,パソコンの電源を切ったとしても,再度実行する必要はありません。 実行してもエラーにはならないので,不安なら何度でも実行して構いませんが,一度インストールしたパッケージはパソコンの中に残りますので,2度目以降の実行には意味がありません。

install.packages() を実行した後,CRANのミラーサイトの選択画面が出たときは,選択肢の中からどれか1つのサイトを選択してください。 どれを選べばよいかわからない場合は,0-Cloud または日本のサイトを選択することをおすすめします。

1.2.5.2 パッケージのロード

インストールしたパッケージをRで使えるようにするためには,目的のパッケージをRにロードする必要があります。 パッケージをロードするには,次のコマンドを用います。

library(readxl)

このとき,以下のようにしても構いません。

library("readxl")

つまり,install.packages() のときは,"" で括らなければなりませんが,library() の場合はどちらでも構いません。

ちなみに,何もしなくても最初からロードされているパッケージがいくつかあります。 その場合,そのパッケージをロードしなくても,そのパッケージに含まれる関数を使うことができます。 どういったパッケージが最初からロードされているかは,使っているうちに理解できると思います。

インストールしたパッケージの関数を使う場合,いま仮に "sample.xlsx" という名前のExcelファイルがあるとすると,以下のコマンドを実行します。

read_excel("sample.xlsx")

このコマンドは,次のように名前空間を付けて書くこともできますが,多くの場合,そうする必要はありません。

readxl::read_excel("sample.xlsx")

1.2.5.3 パッケージをロードし忘れた場合

パッケージをロードし忘れた場合,readxl パッケージの中の関数 read_excel() を使うことができません。 パッケージ内の関数を使おうとすると,関数を見つけることができないというエラーが返ってきます。

また,関数の使い方を知るために,ヘルプを見てみようとします。

?read_excel
## 指定されたパッケージやライブラリ中には 'read_excel' に対するドキュメントはありません
## '??read_excel' を使えたかもしれません

ヘルプのウィンドウではなく,何かメッセージが出てきました。

メッセージに従って,次のコマンドを実行してみます。

??read_excel

どうなりましたか? ウェブブラウザが開き,次の文字が表示されたはずです。

  • readxl::read_excel Read xls and xlsx files

ここに書いてあることを理解しましょう。 左にあるのが,パッケージ名と関数名で,それぞれが :: で結ばれています。 ここでは,readxl というパッケージの中に関数 read_excel() があるということを意味しています。 右側には,その関数がどのようなものかが書かれています。 この記述により,readxl というパッケージの中の関数 read_excel() は,xlsとxlsx(Excelファイルの拡張子)を読む関数であることがわかります。

ちなみに,この例の readxl:: の部分を名前空間と呼びますが,通常知らなくてよいです。 (:: の前に記述されている)パッケージの中の(:: の後に記述されている)関数というように,関数の由来を明示したいときにこのような表記をします。 めったにないことですが,異なるパッケージで同じ関数があるときに,どちらの関数を使うのかを明示する必要があります。 初心者のうちは,自らこういった書き方をする必要はありません。

1.2.5.4 CRAN以外からのパッケージのインストール

CRANに登録されていないパッケージもインストールできる場合があります。 例えば,日本語形態素解析器MeCabのRラッパーである RMeCab パッケージをインストールする方法は次のリンク先に書かれています。

その他にも GitHub からパッケージをインストールできることもあります。 CRAN以外からのパッケージのインストール方法については,各パッケージの説明に従ってください。

1.2.5.5 パッケージのアップデート

パッケージにはバージョンがあり,常に最新のバージョンを使うべきです。 古いバージョンにはバグがあったり,正しい結果が得られない場合があります。 インストールされているパッケージは自動でアップデートされないため,定期的に次のコマンドを実行するように心掛けましょう。

update.packages(ask = FALSE)

なお,アップデートはマウス(またはトラックパッド)だけでも操作できます。 Windowsの場合は,メニューの「パッケージ」から「パッケージの更新…」を選択します。 macOSの場合は,メニューの「パッケージとデータ」から「パッケージインストーラ」を選択し,「すべてアップデート」を選択します。

1.2.5.6 パッケージの一覧表示

インストールされているパッケージの一覧は次のコマンドで得られます。

.packages(all.available = TRUE)

ただし,これは覚えなくてよいです。 また,パッケージがどこにインストールされているかを知りたい場合は,次のコマンドを実行します。

searchpaths()

これも覚えなくてよいです。

もし何らかの理由で,CRANに公開されているパッケージをすべてインストールしたい場合は,以下のコマンドを実行します。

installed <- row.names(installed.packages())
available <- row.names(available.packages())
uninstalled <- available[!available %in% installed]
install.packages(uninstalled)

ただし,来週から数ヶ月間インターネット環境のない場所に行くといった特別な理由がない限り,このような操作は必要ありません。 非常に時間がかかりますし,SSDも大量に消費します。

また,何らかの理由により,CRANでのパッケージの更新が止まり,install.packages() ではパッケージがインストールできなくなることがあります。 安全性の問題や著作権の問題がある場合を除き,パッケージの古いバージョンのインストールを検討してもよいでしょう。 パッケージの任意のバージョンをインストールしたい場合は,次のコマンドを実行します。

library(remotes)
install_version("パッケージ名", version = "バージョン番号")

1.2.5.7 パッケージのアンインストール

特定のパッケージをアンインストールしたい場合は,以下のコマンドを実行します。

remove.packages("パッケージ名")

ただし,この関数は使う機会がないと思います。

1.3 練習問題

  1. 1から10までの整数を足し合わせた合計を求めなさい。
  2. 1から10までの整数の平均を求めなさい。
  3. 1000以上2000以下の整数うち,偶数の値を合計しなさい。
  4. 1から15までの整数ベクトルの累積和を計算し,それぞれの値を表示しなさい。累積和とは,数列の各位置までの合計を表します。
  5. mean() を使わずに,1から20までの整数の平均を計算しなさい。
  6. rep() を使って,1を10回繰り返したベクトルを作りなさい。
  7. seq() を使って1から2まで0.1刻みのベクトルを作り,その合計を求めなさい。
  8. round() を使って,πを小数点以下3桁に丸めなさい。
  9. ggplot2 パッケージをインストールするコマンドを書き,実際にインストールしなさい。
  10. インストール済みのパッケージ ggplot2 を読み込むコマンドを書きなさい。それに続いて,次の2行のコードをまとめて実行しなさい。
ggplot(data = penguins) +
  geom_point(aes(x = flipper_len, y = body_mass, color = species))