R言語

基本文法とデータ

Rを実行する準備から、値・ベクトル・欠損値・条件分岐・繰り返しまでを学びます。

R言語入門の講座一覧

01

実行環境を確認する

RはCRANからインストールできます。RStudioなどのIDEを使う場合も、先にR本体を用意します。コンソールは短い確認、スクリプトは保存して再実行するコードに使い分けます。

バージョンを確認するR
R.version.string
表示例OUTPUT
[1] "R version 4.x.x (...)"
表示は環境で異なります バージョン番号やOS名が例と違っても問題ありません。まずは学習用フォルダーを作り、大切なファイルとは分けて試します。
02

値・型・変数

代表的な型は数値numeric、整数integer、文字列character、真偽値logicalです。代入には一般に<-を使います。

型を確認するR
name <- "Mity"
age <- 20L
height <- 168.5
is_student <- TRUE
class(name)
class(age)
class(height)
class(is_student)
実行結果OUTPUT
[1] "character"
[1] "integer"
[1] "numeric"
[1] "logical"

文字列を数値へ変換するas.numeric()など、変換関数を使うときは、変換できなかった値がNAにならないか確認します。

03

ベクトルを扱う

ベクトルは同じ型の値を順番にまとめるRの基本データです。c()で作り、位置は1から数えます。演算や比較は各要素へまとめて適用できます。

点数を一括計算するR
scores <- c(72, 85, 91, 68)
adjusted <- scores + 5
scores[1]
adjusted
scores[scores >= 80]
実行結果OUTPUT
[1] 72
[1] 77 90 96 73
[1] 85 91
長さの違うベクトル Rは短いベクトルを繰り返して計算することがあります。意図しない再利用を避けるため、length()で長さを確認します。
04

欠損値NAを扱う

NAは値が欠けていることを表します。NA == NAでは判定せず、is.na()を使います。集計から除外する場合はna.rm = TRUEを明示します。

欠損を調べて平均を求めるR
temperatures <- c(22.5, NA, 24.0, 23.5)
is.na(temperatures)
sum(is.na(temperatures))
mean(temperatures, na.rm = TRUE)
実行結果OUTPUT
[1] FALSE  TRUE FALSE FALSE
[1] 1
[1] 23.33333
勝手に除外しない

欠損の理由によって分析結果が偏る場合があります。除外、補完、別分類のどれを選んだか記録しましょう。

05

条件分岐

ifの条件は長さ1の真偽値にします。ベクトルの各要素を分類する場合はifelse()を使います。

点数を判定するR
score <- 82
if (score >= 80) {
  result <- "合格(よくできました)"
} else if (score >= 60) {
  result <- "合格"
} else {
  result <- "再挑戦"
}
print(result)
ifelse(c(55, 72, 88) >= 60, "合格", "再挑戦")
実行結果OUTPUT
[1] "合格(よくできました)"
[1] "再挑戦" "合格" "合格"
06

繰り返し

forは値を順番に取り出します。単純な集計ではベクトル向け関数を先に検討すると読みやすくなります。

名前を順番に表示するR
names <- c("Aki", "Mika", "Sora")
for (i in seq_along(names)) {
  cat(i, ": ", names[i], "\n", sep = "")
}
実行結果OUTPUT
1: Aki
2: Mika
3: Sora
1:length(x)を避ける 空のベクトルでは意図しない添字になります。添字が必要ならseq_along(x)を使います。
PRACTICE

ミニ課題:点数を分類する

c(55, 72, 88, 49)を使い、60点以上を「合格」、80点以上を「よくできました」、それ未満を「再挑戦」と表示してください。空のベクトルでも安全に繰り返せるか確認しましょう。

確認項目
  • ifとifelse()の用途を分けたか
  • ベクトルの位置を1から数えたか
  • 欠損値を安易に除外していないか
  • seq_along()を使ったか