1 まずは使ってみる

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

1.1 環境構築

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

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の準備はこれだけです。

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

RStudioが何をするためのものかを知ってからインストールしても遅くありませんので,Rに慣れてから,Rではできないことをするために,RStudioをインストールすることをおすすめします。 Rコマンダー等,他のソフトウェアもインストールする必要はありません。 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
1 - 2
2 * 3
4 / 2

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

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

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

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

ちなみに,上記の例の2つ目は,正しくは 10 - -2 と書くか,10 - (-2) と書いてください。 マイナス符号の後にスペースを入れると見にくくなるため,入れないのが一般的です(スペースを入れても入れなくても,結果は変わりません)。 読みやすさを優先して,適宜スペースを入れるようにしてください(このページの記述方法は標準的なものです。記述方法をチェックするために,lintr パッケージがあります。ここでは理解する必要はありません)。 どうすれば読みやすくなるかは説明が難しく,たくさんの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的な(R like)やり方は前者,<- を使う方です。

変数 x に値が入ったことは,次のようにして確認できます。

x

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

print(x)

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

hensuu <- 2 * 3

変数の中身を確認したければ,次のようにします。

hensuu

また,変数を使って計算することもできます。

hensuu * 2

変数名は何でも構いません。 例えば,日本語でも大丈夫です。

変数 <- 2 * 10

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

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

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

アルファベットで始まる変数名にしてください。

アルファベットの場合,大文字より小文字が望ましく,意味のある名前だと分かりやすいです。 変数名にはアルファベットと数字以外に _. を含めることもよくあります。 _ は英単語の区切りとして使うと便利です(例:newnames よりも new_names の方が分かりやすい)。 ただし,_ から始まる変数名はエラーになります。 . は特別な理由がない限り,使わない方がよいです(例:new.names といった変数名は扱うことはできるが,避ける方が無難)。 . から始まる変数名は普通の変数ではないため,使わないようにしてください。

作成した変数を削除する場合は,次のコマンドを実行します。

rm(x)

現在使っている変数名は次のコマンドを実行すると分かります。

ls()

また,特定の変数が存在するかは,次のコマンドを実行すると分かります。

exists()

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

rm(list = ls())

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

1.2.2.1 Tips

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

.a <- 10
.a
ls()

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

ls(all.names = 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)

引数の値だけを書いた場合,どの引数の値であるかはコンマで区切られた順番によって決まります。 こうした引数の順番をどのようにして知ることができるでしょうか。 後述する関数のヘルプを参照すると,引数の順番を知ることができます。 また,関数のヘルプを参照すると,どのような引数が使えるかも分かります。 ただし,引数の名前は省略できるのですが,自明な場合を除いて,引数の名前は省略しないことをおすすめします。

ここで,上述した by = 1 のときの 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

これは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ユーザーが有益な関数を作成し,他のユーザーと共有しているものがあります。 これらの関数は,パッケージとしてCRANに公開されており,それを自分のパソコンにインストールできます。

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

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

install.packages("readxl")

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

さて,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.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 CRAN以外からのパッケージのインストール

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

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

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

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

update.packages(ask = FALSE)

なお,アップデートはマウス(またはトラックパッド)だけでも操作できます。 Windowsの場合は,メニューの「パッケージ」から「パッケージの更新…」を選択します。 macOSの場合は,メニューの「パッケージとデータ」から「パッケージインストーラ」を選択し,「すべてアップデート」を選択します。 いずれのOSでも,CRANのミラーサイトの選択画面が出たときは,選択肢の中からどれか1つのサイトを選択してください。 どれを選べばよいかわからない場合は,日本のサイトを選択することをおすすめします。

1.2.5.5 パッケージの一覧表示

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

.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も大量に消費します。

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

なお,これも使う機会はないと思いますが,特定のパッケージをアンインストールしたい場合は,以下のコマンドを実行します。

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

1.3 練習問題

  1. 1から10までの数字を足し算するといくらになるか計算しなさい。
  2. 1から10までの数字の平均を求めなさい。
  3. 1000以上2000以下のうち,偶数の値を合計しなさい。
  4. 1から15までの数列の累積和を計算し、それぞれの値を表示しなさい。累積和とは、数列の各位置までの合計を計算した結果です。