>>勉強の面倒を毎週見てくれる神サービスがこちら

【R言語入門・初級編】R言語の基本

R言語
この記事は約14分で読めます。

「R言語入門」シリーズ一覧

初級編:データをグラフで可視化できるようにしよう!
  • R言語の基本
  • データの読み込み・記述統計量の計算
  • グラフによる可視化
中級編:統計的検定をマスターしよう!
  • 平均値の検定
  • 母比率の検定
  • 独立性の検定
  • 等分散性の検定
  • 一元配置分散分析
上級編:より高度な統計解析に挑戦しよう!
  • 回帰分析
  • ノンパラメトリック検定
  • 時系列データの扱い

この記事で解説すること

本記事では、R言語の基本操作について解説しています。

プログラミング初心者を対象とした記事になっています。

具体的には、次のようなことを学びます。

本記事の内容
  • 演算
  • 論理演算子
  • データ構造
    • ベクトル
    • 行列
    • データフレーム

…名前を聞いただけではまだ何もわからないと思いますが、これらはR言語を使う上では必須の知識になります!

マスターして、R言語への第1歩を踏み出そう!

演算

四則演算

Rはプログラミング言語なので、電卓みたいな使い方ができます。

例えば、足し算。次のようにコードを打ち込んでみてください。

2 + 5

実行すると、次のように計算結果が返ってきます。

7

同様に、差・積・商やカッコつきの計算もできます。

9 - 13
4 * 9
1 / 2
(3 + 2) * 5
-4
36
0.5
25

では、これはどうでしょう。0で割ることはできないのですが…

2 / 0
Inf

「Inf」と出てきました。これは「Infinity」の略で、無限大(∞)を表しています。2を0に十分近い数で割ったら発散する、という意味でこのような結果が返されます。

じゃあ、これはどうだ…?

0 / 0

実行すると…?

NaN

あらら、今度は「NaN」と出てきました。

これは「Not a Number」の略で、数ではないという意味です。確かに極限では0/0は不定形なので、この値を∞とかにするわけにはいきませんからね。

累乗・余り・対数など

四則演算だけではなく、累乗・余り・対数・指数関数・平方根・絶対値・三角関数など、いろいろな計算ができます。

累乗、例えば「2の3乗」は次のように書けます。

2^3
8

割り算の余り、例えば「13を3で割った余り」は次のように書けます。

13 %% 3
1

ちなみに割り算のは、2つの「%」の間に「/」を入れると計算できます。

13 %/% 3
4

対数関数の値はlog()のカッコの中に数字を入れると計算できます。

log(10)
log10(10)
log2(10)
2.302585
1
3.321928

使用するときには底に注意しましょう。

log()   : 底=e (ネイピア数)
log10() : 底=10
log2() : 底=2

このほかにも、指数関数は「exp()」、平方根は「sqrt()」、絶対値は「abs()」、三角関数は「sin(), cos(), tan()」を使って計算することができます。

exp(2)
sqrt(2)
abs(-2)
sin(2)
2.718282
7.389056
1.414214
2
0.9092974

四捨五入・切り捨て・切り上げ

Rでは、四捨五入などもできます。

round()を使うと、四捨五入ができます。2.35を小数第1桁までで表したかったら、次のように書きます。

round(2.35, 1)
2.4

一番最初に四捨五入したい値を入れて…
カンマで区切って…
小数第何位までか、を入れれば完了!

切り捨てや切り上げの操作もできます。切り捨ては「floor()」を、切り上げは「ceiling()」を使います。

floor(2.35)
ceiling(2.35)
2
3

論理演算子

R言語では「論理」を扱えます。ここでいう「論理」は「真か偽か」という意味です。

例を見た方がはやいので、まずは見てみましょう。

3 == 2

これで「3と2は等しいか?」ということを表します。「=」は2つ付けることに注意しましょう。

これを実行すると…

FALSE

となります。3と2は等しくないので、偽つまりFALSEと出たわけですね。

「等しい」だけではなく「等しくない」も表すことができます。コードでは次のようになります。

3 != 2

これで「3と2は等しくないか?」という意味です。

実行すると…

TRUE

となります。

このほかにも、次のように不等式を使った表現も可能です。

3 > 2
3 <= 2
TRUE
FALSE

また、「真(TRUE)」「偽(FALSE)」だけでなく「かつ」「または」も表現することができます。

例えば…

(3 == 3) & (3 > 1)

これは
「『3と3は等しい』かつ『3は1より大きい』」
が成り立つかどうか?を表しています。

「かつ」は「&」で表します。

この例の場合はどちらも真なので

TRUE

となります。

「または」は「|」で表すことができます。実行例を参照してください。

(3 == 2) | (3 > 1)
(3 == 3) | (3 > 1)
(3 == 2) | (3 < 1)
TRUE
TRUE
FALSE

データ構造

変数

変数とは

「変数って何?」の説明に入る前に、次の問題をR言語を使って解いてみましょう。

f(x)=(x-1)x(x+1)+sin(x)とする。f(5)の値を計算せよ。

おそらくプログラミング初心者は次のように答えるでしょう。

(5-1)*5*(5+1)+sin(5)
119.0411

もちろんこれでも正解です。しかし、これに引き続いて

f(2)の値を計算せよ。

と言われた場合、5を2に変えるという地道な作業を4回行わなければなりません。面倒ですね。

この面倒さを解消するのが「変数」です。

「変数」は値などのデータを入れるのようなものです。どういうことなのか、例を見ながら理解しましょう。

x <- 5

このコードは、

xという変数に5というを入れる

ということを表しています。(この「入れる」作業のことを代入すると言います。)

xと5の間にある「<-」は矢印(←)に似ているね!

このコードを実行しても何も出力されませんが、変数xに5という値が入った状態になります。

この状態で、次のコードを実行してみましょう。

(x-1)*x*(x+1)+sin(x)

さきほどの「5」を変数xで置き換えたものですね。実行すると…

119.0411

はい、さきほどの結果と同じ値が出てきましたね!

では次の問題を解くときにはどうすればよいでしょうか?

f(2)の値を計算せよ。

この場合、変数xに入っている値を上書きします。やり方は先ほどと同じで、

x <- 2

とします。先ほどまでは変数xに5が入っていましたが、この操作を行ったことで変数xには2が入っている状態になります。

元々xの中に入っていた5という値はなくなることに注意してください。

この状態でこちらを実行すると…

(x-1)*x*(x+1)+sin(x)
6.909297

となります。

つまり、わざわざ1つ1つの数字を書き換えなくても、変数xの値を書き換えてあげるだけでいいのです!

変数の名前

変数の名前は「x」じゃなくてもOK?

今回の例では、変数の名前として「x」を使いましたが、
(ある例外を除いて)好きな名前を使うことができます。

R言語の変数の名前のつけ方のルールは次の通りです。

  • 変数名に使える文字は小文字の a から z および大文字の A から Z
  • 0 から 9 の数字や ピリオド . および アンダースコア _ も使える
  • 変数名の最初の文字に数字を使うことはできない
  • R の予約語を変数名に使うことはできない

予約語というのは R 言語で使う特殊な役割を持ったキーワードのことで、それらと同じ名前の変数名を付けることはできません。そのようなキーワードとしては
ifelsewhilefunctionforinnextbreakTRUEFALSENULLNANaNInf
などがあります。

https://htsuda.net/stats/intro.html#変数の命名規則より引用

例えば、xの代わりにhogeを用いて

hoge <- 2

などです。しかし、このように適当すぎる名前だと
「この変数にはどんな値が入ってるの?」
とわからなくなってしまうので、変数の意味を表す名前をつけるとよいです。

文字列なども変数に入れることができる

ここまでずっと数字を扱ってきましたが「文字列」も扱うことができます。

例えば、

name <- "松田"

とすることで、変数nameに「松田」という文字列を代入することができます。

ただし、文字列と認識させるためには、文字列を
ダブルクォーテーション (“AAA”)
または
シングルクォーテーション (‘AAA’)
で囲む必要があります。

ベクトル

前節では「変数」を扱いました。次は「ベクトル」というデータ構造を見ていきます。

まずはこちらの例を見てください。

score1 <- 90
score2 <- 75
score3 <- 76
score4 <- 60
score5 <- 82
score6 <- 95
score7 <- 85
score8 <- 79
score9 <- 65
score10 <- 72

このコードでは、10人分のテストの点数を変数score1, …, score10に格納しています。

しかしこの方法はかなり面倒です。100人、1000人とデータの個数が多くなると、変数の数もその分増えてしまいます。

この問題を解決してくれるデータ構造の一つが「ベクトル」です。
ベクトルでは、1つの変数で複数のデータを保持することができます。

R言語でベクトルを使用するには、次のようにします。

scores <- c(90, 75, 76, 60, 82, 95, 85, 79, 65, 72)

c()のカッコ内に、カンマ区切りでデータを入力すればOKです。

ベクトルから値を取り出したいときはどうすればいいの?

ベクトルから値を取り出すには、次のようにします。

例えば、scoresの1番先頭の値を取り出すときにはscores[1]と書きます。

scores[1]
90

同様に、2番目・3番目・…の値を取り出すには
scores[2]
scores[3]

とすればOKです。

「3番目~6番目の値をまとめて取り出す」みたいなことはできるの?

はい、できます。角カッコの中身を[3:6]とすればよいです。

scores[3:6]
76 60 82 95

採点ミスが発覚して、3番目の子の点数を修正したいんだけど…

ベクトルの要素を上書きすることもできます。上書きするには、次のようにします。

scores[3] <- 80
scores
90 75 80 60 82 95 85 79 65 72

行列

次に「行列」というデータ構造を解説します。

行列も、ベクトル同様に複数の値を入れることができます。
ベクトルは1つの列のような形(まさにベクトル!)でしたが、行列ではその名の通り行列の形をしています。

例を見てみましょう。

pos <- c(1,1,4,7,8,6,1,5,0,2,0,2,5,8,7,0)
1 1 4 7 8 6 1 5 0 2 0 2 5 8 7 0

posには、2次元平面上の座標(x,y)を表すデータ8つがベクトルで格納されています。
前半の8つの値(1,1,4,7,8,6,1,5)がx座標、後半の8つの値がy座標を表しています。

しかし、ベクトルのままでは非常に見にくいし使いづらいです。

そこで次のようなコードを書くと、ベクトルposを行列の形に変換してくれます。

matrix(pos, nrow=8, ncol=2)
     [,1] [,2]
[1,]    1    0
[2,]    1    2
[3,]    4    0
[4,]    7    2
[5,]    8    5
[6,]    6    8
[7,]    1    7
[8,]    5    0

このコードをこれから詳しく解説します。

matrix()のカッコの中には、様々な情報を入力します。

まず必須なのは「どのデータを行列に変換したいか」という情報です。ここでは pos を変換したいので、カッコの中に pos とだけ書いてみます。

matrix(pos)

しかし、これだけでは次のように1列の行列になってしまいます。

      [,1]
 [1,]    1
 [2,]    1
 [3,]    4
 [4,]    7
 [5,]    8
 [6,]    6
 [7,]    1
 [8,]    5
 [9,]    0
[10,]    2
[11,]    0
[12,]    2
[13,]    5
[14,]    8
[15,]    7
[16,]    0

なので、行列の形を指定してあげる必要があります。

行列の形を指定するには、posに続けて「nrow=(行数), ncol=(列数)」と書きます。

matrix(pos, nrow=8, ncol=2)

こんな具合です。
このコードで「posを8行2列の行列に変換する」という操作を表します。

ベクトルを行列に変換するとき、列方向(タテ方向)に数字が並ぶけど、行方向(ヨコ方向)に並べることはできないの?

できます!次のように、「byrow=TRUE」という情報を追加すればOKです。

matrix(pos, nrow=8, ncol=2, byrow=TRUE)
     [,1] [,2]
[1,]    1    1
[2,]    4    7
[3,]    8    6
[4,]    1    5
[5,]    0    2
[6,]    0    2
[7,]    5    8
[8,]    7    0

データフレーム

最後に、R言語でデータ分析をする際に最もよく使うデータフレームについて解説します。

データフレームは表のような形をしています。

このような表形式のデータを扱うのが「データフレーム」。

ここでは、データフレームの作成方法について解説します。
データフレームの詳しい操作方法は、続編の記事の中で都度解説します。

まずは、データを用意します。ここでは、各データをベクトルに格納しておきます。

age <- c(59,48,72,24,50,60,47,60,36,36)
sex <- c("female","male","female","male","male","female","female","female","male","male")
bmi <- c(32.1,21.6,30.5,25.3,23.0,28.2,24.9,24.9,30.0,19.6)

そして、これをデータフレームにまとめます。
先ほどのデータをdata.frame()の中にぶち込むだけです。

df <- data.frame(age, sex, bmi)
df
   age    sex  bmi
1   59 female 32.1
2   48   male 21.6
3   72 female 30.5
4   24   male 25.3
5   50   male 23.0
6   60 female 28.2
7   47 female 24.9
8   60 female 24.9
9   36   male 30.0
10  36   male 19.6

このように、表形式でデータを扱うことができるようになりました。

データフレームの値の取り出し方など、いろいろ解説すべき点は多いですが、その点に関しては次回の記事以降で具体例を通して学んでいきましょう。

その他のデータ構造

今回解説した

  • 変数
  • ベクトル
  • 行列
  • データフレーム

以外にも、

  • 配列
  • リスト
  • テーブル

というデータ構造もRには用意されています。これらについては、もし必要になった時に解説しようと思います。

まとめ

本記事のまとめ
  • 演算
    • 四則演算は、「+」「-」「*」「/」を使って行う!
    • 累乗、余り、対数などの計算もできる!
    • 四捨五入にはround()やfloor(), ceiling()を使う!
  • 論理演算子
    • 「==」「!=」「<」「>」などを使って、等式・不等式の関係が正しいかどうかを判定できる!
    • 「&」「|」で、それぞれ「かつ」「または」を表す!
  • データ構造
    • 変数
      値を入れる入れ物のようなもの。「<-」で値を代入することができる!
    • ベクトル
      c()のカッコの中にデータを複数入れることができる!
    • 行列
      行列のように2次元の構造を持ったデータ。matrix()を使う!
    • データフレーム
      表のようなデータ構造。data.frame()を使う!

次回は、データをファイルから読み込む方法や、平均や分散などの記述統計量を求めるやり方を解説します!

この記事は役に立ちましたか?
  • 役に立った 
  • ふつう 
  • 役に立たなかった 

記事への意見・感想はコチラ

タイトルとURLをコピーしました