3  Rの基本操作

それでは,Rの操作を学んでいきましょう。 ここからはRのコードを示すので,その内容をColabに入力 (あるいはコピペ)してみてください。 たとえば,3 + 4というコードを入力してほしい場合, 本書では次のように書きます。

3 + 4
[1] 7

薄い灰色の部分が入力してほしいコード(この場合は3 + 4)です。 その下の桃色の部分は,コードの実行結果(この場合は7)になります。 [1]という表示は気にしなくて構いません。

なお,コードを描いているとエラーが表示されることがあります。 エラーがでた場合は,エラーが出た場合 の内容を思い出し,落ち着いて対処してください。

3.1 四則演算

最初に,いくつか四則演算を行ってみましょう。 いくつか例を示すので,Colabで試してみてください。

3 + 4 # 足し算
[1] 7
6 - 8 # 引き算
[1] -2
3 * 2 # 掛け算
[1] 6
5 / 4 # 割り算
[1] 1.25
5^2 # 2乗
[1] 25

ちなみに#から始まる部分はコメントで,Rに入力しても無視されます。 これを利用して,Rのコード内にメモを書くことができます。

# ここはコメントです。# から先のコメントは実行されません。
sqrt(4) # メモの例。sqrt()は平方根を計算します。
[1] 2

3.2 オブジェクト

Rにかぎりませんが,プログラミングでは 同じ数値を何度も扱うことがあります。 このような場合,Rではオブジェクトと呼ばれる ものを作って情報を保存します。 オブジェクトに情報を保存することを「格納する」と言います。 Rでは,<-という記号を使ってオブジェクトに情報を格納します。 なお,存在しないオブジェクトを入力すると,エラーが返ります1

a <- 40 # a(というオブジェクト)に40を格納
a + 10 # a + 10を計算
[1] 50
b # bは存在しないので,エラー(Error: object 'b' not found)が返ります。
Error: object 'b' not found
b <- 10 # bに10を格納
b # 今度はエラーは出ません。
[1] 10

オブジェクトには,数値以外に文字を格納することもできます。 たとえば文字は,ダブルクオーテーション(")でくくって,"moji"と表現します。 ダブルクオーテーション無しにmojiと入力すると,それはmojiというオブジェクトを意味します。

"moji" # 文字です。
[1] "moji"
moji # mojiというオブジェクトです。存在しないのでエラーが返ります。
Error: object 'moji' not found
moji <- "moji" # mojiというオブジェクトに,"moji"という文字を格納しています。
moji # "moji"と表示されます。
[1] "moji"

3.3 ベクトルとリスト

続いて,ベクトルとリストという考え方を学びます。 これは複数の数値や文字をまとめて扱う方法で,Rを使った分析では頻出します。

最初にベクトルについて説明します。 ベクトルは,c( )という記法で表現します。 たとえば,ある学級(仮にAクラスとします)の5人の児童の成績が, 40点・40点・60点・80点・80点だったとしましょう。 このときAクラスの成績をAというオブジェクトにまとめて扱うには, ベクトルを使って次のように書きます。

A <- c(40, 40, 60, 80, 80) # ベクトルを作成し,Aに格納。
A # Aの中身が表示されます。
[1] 40 40 60 80 80

ベクトルには,数値だけでなく文字も格納できます。 ただし数値と文字を混ぜると,すべての要素が文字に変換されてしまうので注意しましょう。

B <- c("a", "b", "c") # 文字"a", "b", "c"を要素とするベクトルを作成し,Bに格納
B # Bを表示
[1] "a" "b" "c"
C <- c(1, "a", "b") # 文字と数値を混ぜたベクトル
C # 数値1が,文字"1"になっています
[1] "1" "a" "b"

リストは,文字と数値のように種類の違うものを格納するときに使います。 リストは,list( )という記法で表現します。 リストには数値や文字だけでなく,ベクトルやリストを格納することもできます。 Rでは,複雑な計算結果をリストに格納することもあります。

L1 <- list(1, "a", 2) # 数値と文字が混ざったリスト
L1
[[1]]
[1] 1

[[2]]
[1] "a"

[[3]]
[1] 2
L2 <- list(c(1, 2, 3), "a", 1) # ベクトルと文字と数値を格納したリスト
L2
[[1]]
[1] 1 2 3

[[2]]
[1] "a"

[[3]]
[1] 1

3.4 規則的なベクトルの生成

Rを使っていると,規則的なベクトルが欲しくなるときがあります。 たとえば, 「1から10まで1ずつ増えるベクトル」 「10から30まで5ずつ増える(あるいは減る)ベクトル」 「1から3までを3回繰り返すベクトル」 などです。 Rでは,こうした規則的なベクトルを生成することができます。

1:10 # 1から10まで1ずつ増えるベクトル
 [1]  1  2  3  4  5  6  7  8  9 10
seq(10, 30, 5) # 10から30まで5ずつ増えるベクトル
[1] 10 15 20 25 30
seq(30, 10, -5) # 30から10まで5ずつ減るベクトル
[1] 30 25 20 15 10
rep(1:3, 3) # 1から3までを3回繰り返すベクトル
[1] 1 2 3 1 2 3 1 2 3

3.5 ベクトルやリストの要素にアクセスする

作成したベクトルやリストの中身(要素と言います)に アクセスしたいときは,[ ]や,[[ ]]といった記号を使います。

x <- 1:10
x[3] # xの3番目の要素
[1] 3
x[-3] # xの3番目の要素を除いた要素
[1]  1  2  4  5  6  7  8  9 10
x[2:4] # xの2〜4番目の要素
[1] 2 3 4
x[seq(1, 5, 2)] # xの1,3,5番目の要素
[1] 1 3 5
y <- list(1:5, 6:10, 11:15)
y[[2]] # yの2番目の要素
[1]  6  7  8  9 10
y[[2]][3:4] # yの2番目の要素の中の3番目と4番目の要素
[1] 8 9

3.6 条件を付けて要素にアクセスする

「ベクトル内の6という要素」「ベクトル内の4以上の要素」といった 条件を付けることも可能です。 Rでは,z == 3とすると,zの要素についてそれぞれが3と一致するかどうか判定してくれます。 一致する場合はTRUE,一致しない場合はFALSEが返ってきます。 また,z > 4とすると,それぞれzの要素についてそれぞれが4より上かどうか判定してくれます。 ==>以外にも,<(より下)や<=(以下),>=(以上)といった書き方もできます。

z <- 1:5
z == 3 # 要素が3と一致するかどうか
[1] FALSE FALSE  TRUE FALSE FALSE
z < 4 # 要素が4より下かどうか
[1]  TRUE  TRUE  TRUE FALSE FALSE
z > 4 # 要素が4より上かどうか
[1] FALSE FALSE FALSE FALSE  TRUE
z <= 4 # 要素が4以下かどうか
[1]  TRUE  TRUE  TRUE  TRUE FALSE

さらにz[z <= 2]とすると,zの要素のうち2以下のものを抽出してくれます。 ここで,z[z <= 2] <- 0とすれば,zの要素のうち2以下のものがすべて0に置き換わります。

z[z <= 2]
[1] 1 2
z[z <= 2] <- 0
z
[1] 0 0 3 4 5

その他,「ベクトル内の2と4は0にする」といった操作も可能です。 w %in% c(2, 4)と書くと,wの要素のそれぞれが2または4と一致するかどうか判定してくれます。 そのため,w[w %in% c(2, 4)] <- 0と書くことで,2か4の要素を0に変換することができます。

w <- c(3, 1, 4, 5, 1, 5, 5, 2, 4, 5, 2)
w %in% c(2, 4)
 [1] FALSE FALSE  TRUE FALSE FALSE FALSE FALSE  TRUE  TRUE FALSE  TRUE
w[w %in% c(2, 4)] <- 0
w
 [1] 3 1 0 5 1 5 5 0 0 5 0

Rの基本操作は,これで終わりです。 なぜこんな機能が必要なのか,よくわからないという人も多いでしょう。 今はそれで構いません。 Rを使っていくうちに,ベクトルやリストの便利さがわかるようになってきます。 続いて,これらの機能を使い,標本調査の基礎知識を学びましょう。


  1. プログラミングでは何らかの入力に対して, 結果が「返ってくる(return)」という表現をよく使います。↩︎