見出し画像

【Webエンジニアの備忘録】Rの基本文法

はじめに

ソフトウェアエンジニアのKitaharaです.
本日は【データの集め方講座】でRtweetというライブラリを使いたくなったため, R言語の基本文法の備忘録を残しておきます.

なぜR言語を使うのか

ライブラリが良い.
これが非常に大きいです.

Rは当初珍しい無料で使える統計言語であったため, ライブラリが非常に充実しています. こと解析にかけては無いものはないと言われるほどです.

言語としてはPHPやJava, Pythonをやっていた人からするとかなり特殊な印象を受けますが, ライブラリが充実しているので実は簡潔に書けるということがあったりします.

そんなR言語の基本文法を解説していきます.

環境構築

Rの開発環境構築はRStudio Cloudでとても簡単になりました.
はじめてR使うという方はぜひこちらを参考にしてみてください.

Rの基本文法

変数の型

変数の代入は"="ではなく"<-"を使います.

入力

# tutorial.R

### 変数の型について

x1 <- 1
mode(x1)

x2 <- 3.14
mode(x2)

x3 <- 1+1i
mode(x3)

x4 <- TRUE
mode(x4)

x5 <- "R" # 文字列を代入するときはダブルクオーテーション
mode(x5)

出力

整数型はas.intgerを使わないといけないようです.

> x1 <- 1
> mode(x1)
[1] "numeric"
> x2 <- 3.14
> mode(x2)
[1] "numeric"
> x3 <- 1+1i
> mode(x3)
[1] "complex"
> x4 <- TRUE
> mode(x4)
[1] "logical"
> x5 <- "R" # 文字列を代入するときはダブルクオーテーション
> mode(x5)
[1] "character"

データ構造

Rはデータ構造が豊富です.
例えばPythonだとPandasというライブラリで使うようなDataFrameが標準装備であったりします.

入力

###### データ構造
### ベクトル
vec1 <- c(1,2,3,4,5)

# ベクトルの中に含まれるデータは同じ型にキャストされる
# character > complex > numeric > logical > NULL

vec2 <- c(1,TRUE)
print(vec2)

print(vec1[1]) # Rのベクトルのインデックスは1から始まる
print(vec1[1:3])

### データフレーム
df <- data.frame(column1 = c(1, 2, 3, 4, 5), column2 = c("a", "b", "c", "d", "e"))
print(df)

### リスト
lst <- list(c(1,2,3,4,5),"R is good Language",TRUE)
print(lst)


### 行列
mat = matrix(1:4, nrow = 2, ncol = 2)
print(mat)

### 配列
arr = array(1:8, dim = c(2, 2, 2))
print(arr)

出力

[1] 1 1 # TRUE が数値に
[1] 1
[1] 1 2 3
  column1 column2
1       1       a
2       2       b
3       3       c
4       4       d
5       5       e
[[1]]
[1] 1 2 3 4 5

[[2]]
[1] "R is good Language"

[[3]]
[1] TRUE

     [,1] [,2]
[1,]    1    3
[2,]    2    4
, , 1

     [,1] [,2]
[1,]    1    3
[2,]    2    4

, , 2

     [,1] [,2]
[1,]    5    7
[2,]    6    8

変数はRのEnvironmentにあります.
ここで先程の変数vec2を確認してみましょう.

TRUEが1になった!

条件分岐

条件分岐はPHPやJavaと同じ感覚で書くことができます.
他の書き方もできますが, これが書ければ大丈夫だと思います.

入力

###### 条件分岐
age <- 20
if (age < 0) {
  print('存在しない値です')
} else if (age < 20) {
  print('飲酒できません')
} else {
  print('飲酒できます')
}

出力

[1] "飲酒できます"

繰り返し

入力

for (i in 1:10) {
  print(i)
}

# Rはforeachとforを区別しない
lst <- list(1,3,2,4,5,4,6,7,6)

for (j in lst) {
  print(j)
}

x <- 10
while (x >= 5) {
  print(x)
  x <- x -1
}

# Pythonでいうbreak, continueがbreak, nextになる
lst <- list(1,3,2,4,5,4,6,7,6)

for (j in lst) {
  if (j == 4){ # 4の時は強制的にス切符
    next
  } else if (j == 7) { # 7であれば終了
    break
  } else {
    print(j)
  }
}

出力

> for (i in 1:10) {
+   print(i)
+ }
[1] 1
[1] 2
[1] 3
[1] 4
[1] 5
[1] 6
[1] 7
[1] 8
[1] 9
[1] 10
> # Rはforeachとforを区別しない
> lst <- list(1,3,2,4,5,4,6,7,6)
> for (j in lst) {
+   print(j)
+ }
[1] 1
[1] 3
[1] 2
[1] 4
[1] 5
[1] 4
[1] 6
[1] 7
[1] 6
> x <- 10
> while (x >= 5) {
+   print(x)
+   x <- x -1
+ }
[1] 10
[1] 9
[1] 8
[1] 7
[1] 6
[1] 5
> # Pythonでいうbreak, continueがbreak, nextになる
> lst <- list(1,3,2,4,5,4,6,7,6)
> for (j in lst) {
+   if (j == 4){ # 4の時は強制的にス切符
+     next
+   } else if (j == 7) { # 7であれば終了
+     break
+   } else {
+     print(j)
+   }
+ }
[1] 1
[1] 3
[1] 2
[1] 5
[1] 6

自作関数

入力

自作関数を作る時は関数オブジェクトを作ってそこに引数を入れる形で実行します.

割とJavaScriptっぽい書き方をするが, 注意…
returnを書かないと最終行がreturnされます

この仕様知らないとやらかしそうですよね()

hoge <- function(vec = 1:10) {
  sum_all_num_in_vec <- 0
  for (i in vec) {
    sum_all_num_in_vec <- sum_all_num_in_vec + i
  }
  return (sum_all_num_in_vec)
}

print(hoge(1:20))

出力

[1] 210

おわりに

今回はR言語の基本文法を解説しました!
参考になったという方はぜひハートボタンを押していってください!

モチベーションが上がります!

記事内で不明な点等ございましたら気軽にご連絡ください.

Twitter: @kitahara_dev
email: kitahara.main1@gmail.com

参考文献

更新情報

2022/02/11 記事内のオブジェクトの配置を修正しました


この記事が気に入ったらサポートをしてみませんか?