3 + 4
[1] 7
それでは,Rの操作を学んでいきましょう。 ここからはRのコードを示すので,その内容をColabに入力 (あるいはコピペ)してみてください。 たとえば,3 + 4
というコードを入力してほしい場合, 本書では次のように書きます。
3 + 4
[1] 7
薄い灰色の部分が入力してほしいコード(この場合は3 + 4
)です。 その下の桃色の部分は,コードの実行結果(この場合は7)になります。 [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
Rにかぎりませんが,プログラミングでは 同じ数値を何度も扱うことがあります。 このような場合,Rではオブジェクトと呼ばれる ものを作って情報を保存します。 オブジェクトに情報を保存することを「格納する」と言います。 Rでは,<-
という記号を使ってオブジェクトに情報を格納します。 なお,存在しないオブジェクトを入力すると,エラーが返ります1。
<- 40 # a(というオブジェクト)に40を格納
a + 10 # a + 10を計算 a
[1] 50
# bは存在しないので,エラー(Error: object 'b' not found)が返ります。 b
Error: object 'b' not found
<- 10 # bに10を格納
b # 今度はエラーは出ません。 b
[1] 10
オブジェクトには,数値以外に文字を格納することもできます。 たとえば文字は,ダブルクオーテーション(")でくくって,"moji"と表現します。 ダブルクオーテーション無しにmojiと入力すると,それはmojiというオブジェクトを意味します。
"moji" # 文字です。
[1] "moji"
# mojiというオブジェクトです。存在しないのでエラーが返ります。 moji
Error: object 'moji' not found
<- "moji" # mojiというオブジェクトに,"moji"という文字を格納しています。
moji # "moji"と表示されます。 moji
[1] "moji"
続いて,ベクトルとリストという考え方を学びます。 これは複数の数値や文字をまとめて扱う方法で,Rを使った分析では頻出します。
最初にベクトルについて説明します。 ベクトルは,c( )
という記法で表現します。 たとえば,ある学級(仮にAクラスとします)の5人の児童の成績が, 40点・40点・60点・80点・80点だったとしましょう。 このときAクラスの成績をAというオブジェクトにまとめて扱うには, ベクトルを使って次のように書きます。
<- c(40, 40, 60, 80, 80) # ベクトルを作成し,Aに格納。
A # Aの中身が表示されます。 A
[1] 40 40 60 80 80
ベクトルには,数値だけでなく文字も格納できます。 ただし数値と文字を混ぜると,すべての要素が文字に変換されてしまうので注意しましょう。
<- c("a", "b", "c") # 文字"a", "b", "c"を要素とするベクトルを作成し,Bに格納
B # Bを表示 B
[1] "a" "b" "c"
<- c(1, "a", "b") # 文字と数値を混ぜたベクトル
C # 数値1が,文字"1"になっています C
[1] "1" "a" "b"
リストは,文字と数値のように種類の違うものを格納するときに使います。 リストは,list( )
という記法で表現します。 リストには数値や文字だけでなく,ベクトルやリストを格納することもできます。 Rでは,複雑な計算結果をリストに格納することもあります。
<- list(1, "a", 2) # 数値と文字が混ざったリスト
L1 L1
[[1]]
[1] 1
[[2]]
[1] "a"
[[3]]
[1] 2
<- list(c(1, 2, 3), "a", 1) # ベクトルと文字と数値を格納したリスト
L2 L2
[[1]]
[1] 1 2 3
[[2]]
[1] "a"
[[3]]
[1] 1
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
作成したベクトルやリストの中身(要素と言います)に アクセスしたいときは,[ ]や,[[ ]]といった記号を使います。
<- 1:10
x 3] # xの3番目の要素 x[
[1] 3
-3] # xの3番目の要素を除いた要素 x[
[1] 1 2 4 5 6 7 8 9 10
2:4] # xの2〜4番目の要素 x[
[1] 2 3 4
seq(1, 5, 2)] # xの1,3,5番目の要素 x[
[1] 1 3 5
<- list(1:5, 6:10, 11:15)
y 2]] # yの2番目の要素 y[[
[1] 6 7 8 9 10
2]][3:4] # yの2番目の要素の中の3番目と4番目の要素 y[[
[1] 8 9
「ベクトル内の6という要素」「ベクトル内の4以上の要素」といった 条件を付けることも可能です。 Rでは,z == 3
とすると,zの要素についてそれぞれが3と一致するかどうか判定してくれます。 一致する場合はTRUE
,一致しない場合はFALSE
が返ってきます。 また,z > 4
とすると,それぞれzの要素についてそれぞれが4より上かどうか判定してくれます。 ==
や>
以外にも,<
(より下)や<=
(以下),>=
(以上)といった書き方もできます。
<- 1:5
z == 3 # 要素が3と一致するかどうか z
[1] FALSE FALSE TRUE FALSE FALSE
< 4 # 要素が4より下かどうか z
[1] TRUE TRUE TRUE FALSE FALSE
> 4 # 要素が4より上かどうか z
[1] FALSE FALSE FALSE FALSE TRUE
<= 4 # 要素が4以下かどうか z
[1] TRUE TRUE TRUE TRUE FALSE
さらにz[z <= 2]
とすると,zの要素のうち2以下のものを抽出してくれます。 ここで,z[z <= 2] <- 0
とすれば,zの要素のうち2以下のものがすべて0に置き換わります。
<= 2] z[z
[1] 1 2
<= 2] <- 0
z[z 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に変換することができます。
<- c(3, 1, 4, 5, 1, 5, 5, 2, 4, 5, 2)
w %in% c(2, 4) w
[1] FALSE FALSE TRUE FALSE FALSE FALSE FALSE TRUE TRUE FALSE TRUE
%in% c(2, 4)] <- 0
w[w w
[1] 3 1 0 5 1 5 5 0 0 5 0
Rの基本操作は,これで終わりです。 なぜこんな機能が必要なのか,よくわからないという人も多いでしょう。 今はそれで構いません。 Rを使っていくうちに,ベクトルやリストの便利さがわかるようになってきます。 続いて,これらの機能を使い,標本調査の基礎知識を学びましょう。
プログラミングでは何らかの入力に対して, 結果が「返ってくる(return)」という表現をよく使います。↩︎