#author("2019-02-22T04:08:42+00:00","","")
#author("2019-02-22T05:01:27+00:00","","")
* R言語 [#zb0c5a03]
#setlinebreak(on);

#contents
-- 参考
--- 公式サイト - https://www.r-project.org/
-- 関連
--- [[機械学習の為の数学の基礎]]
--- [[ディープラーニング入門]]
--- [[TensorFlow入門]]
--- [[Keras入門]]
--- [[Chainer入門]]
--- [[PyTorch入門]]
--- [[pandas入門]]
--- [[numpy入門]]

** 概要 [#zeb574ac]
#html(<div style="padding-left: 10px;">)
R言語は、統計解析向けのプログラミング言語及びその開発実行環境。
#html(</div>)


** インストール [#j9fb2c66]
#html(<div style="padding-left: 10px;">)

以下の URLからインストーラをダウンロードしてインストール

| - | URL |h
| R | http://cran.r-project.org/mirrors.html |
| R Studio | https://www.rstudio.com/products/rstudio/download/ |

#html(</div>)

** 変数への代入 [#m73b1483]
#html(<div style="padding-left: 10px;">)

変数への代入は <- または -> で行う。
以下は、1&#12316;5までの連続した値のベクトルを生成し、x という変数に代入している。
#myterm2(){{
> x <- c(1:5)
> x
[1] 1 2 3 4 5
}}

複数の変数に代入する事も可能
#myterm2(){{
> 1:5 -> x -> y
> x
[1] 1 2 3 4 5
> y
[1] 1 2 3 4 5
}}

左辺と右辺は入れ替える事も可能
#myterm2(){{
> x <- y <- 1:5
> x
[1] 1 2 3 4 5
> y
[1] 1 2 3 4 5
}}

#html(</div>)

** 連続した値の生成 [#k552614f]
#html(<div style="padding-left: 10px;">)

n:m と記述する事で連続した値を生成する事ができる。
#myterm2(){{
> 1:5
[1] 1 2 3 4 5
}}
#html(</div>)

#html(<div style="padding-left: 10px;">)

開始値, 終了値, 増分 を指定して値を生成する場合は seq を使用する。
#myterm2(){{
> seq(1, 5, 2)
[1] 1 3 5
}}
#html(</div>)

** 繰り返し値の生成 [#me5a12bc]
#html(<div style="padding-left: 10px;">)

任意の値をN個分繰り返すには rep を使用する。
#myterm2(){{
> rep(1, 5)
[1] 1 1 1 1 1
}}

値には ベクトルを指定する事もできる。
#myterm2(){{
> rep(1:3, 5)
 [1] 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3
}}
#html(</div>)

** ベクトルの生成 [#l89aab77]
#html(<div style="padding-left: 10px;">)

ベクトルの生成は c() で行う。
#myterm2(){{
> x <- c(100,200,300)
> x
[1] 100 200 300
}}

#html(</div>)


** 外部ファイルの読み込み [#p6b86aab]
#html(<div style="padding-left: 10px;">)

別ファイルに保存したスクリプトを読み込むには source を使用する。

test.R
#mycode2(){{
x = c(1:5)
}}

実行例
#myterm2(){{
> source("test.R")
> x
[1] 1 2 3 4 5
}}
#html(</div>)

** オブジェクトの出力 [#b1c04a1d]
#html(<div style="padding-left: 10px;">)

*** print [#ne4baeb7]
#html(<div style="padding-left: 10px;">)
#myterm2(){{
> x <- 1:5
> print(x)
[1] 1 2 3 4 5
}}
#html(</div>)

*** sprintf [#qb6b4fb5]
#html(<div style="padding-left: 10px;">)

書式付きでオブジェクトを表示する場合には sprint を使用する。
#myterm2(){{
> sprintf("%3.2f", 123.456)
[1] "123.46"
}}
#html(</div>)

*** cat [#ca84f6b4]
#html(<div style="padding-left: 10px;">)
cat を使用すれば文字列をダブルクォーテーションなしで表示できる。
#myterm2(){{
> str1 = "ABCDEFG"
> cat(str1)
ABCDEFG
}}
#html(</div>)

*** str [#k06035be]
#html(<div style="padding-left: 10px;">)
str を使用すると、オブジェクトの内容をデータ型などの情報付きで表示できる。
#myterm2(){{
> str1 = "123"
> str(str1)
 chr "123"
}}
#html(</div>)

#html(</div>)

** ファイル入出力 [#zf6c6aea]
#html(<div style="padding-left: 10px;">)

*** 基本的なデータ入出力 [#he11ad56]
#html(<div style="padding-left: 10px;">)
file
write
writeLine
#html(</div>)

*** CSVファイルの入出力 [#n75dfefe]
#html(<div style="padding-left: 10px;">)
#TODO
write.csv
#html(</div>)

*** データフレームの入出力 [#be52291a]
#html(<div style="padding-left: 10px;">)
#TODO
read.table
write.table
#html(</div>)

*** Excelへのデータ出力 [#r12e1735]
#html(<div style="padding-left: 10px;">)
#TODO
write.xlsx()
write.xlsx2()
#html(</div>)

#html(</div>)

** 条件分岐 [#ma266456]
#html(<div style="padding-left: 10px;">)
#myterm2(){{
> x = 10
> if (x > 5) {
+   print("x > 5")
+   print(x)
+ } else {
+   print("x <= 5")
+   print(x)
+ }
[1] "x > 5"
[1] 10
}}
#html(</div>)


** 繰り返し [#b392c670]
#html(<div style="padding-left: 10px;">)
繰り返し処理には for文が使用できる。
&color(red){ただし R の for文は遅いので処理を関数化して apply系で記述する方が高速に動作する。};
#myterm2(){{
> for (i in 1:5) {
+   print(i)
+ }
[1] 1
[1] 2
[1] 3
[1] 4
[1] 5
}}
#html(</div>)

** 文字列の操作 [#pf712062]
#html(<div style="padding-left: 10px;">)

*** 文字列の結合 [#rd674a09]
#html(<div style="padding-left: 10px;">)
#myterm2(){{
> paste("abc", "def", sep="")
[1] "abcdef"
}}
#html(</div>)
#html(</div>)

** リストの操作 [#e0f640a6]
#html(<div style="padding-left: 10px;">)
#TODO
#html(</div>)

** ベクトルの操作 [#be7e9df4]
#html(<div style="padding-left: 10px;">)

*** ベクトルの生成 [#i3c3ce12]
#html(<div style="padding-left: 10px;">)

c() でベクトルの生成を行う事ができる。
#myterm2(){{
> x <- c(100,200,300)
> x
[1] 100 200 300
}}

連続した値のベクトルであれば n:m でも生成可能。
#myterm2(){{
> x <- 1:5
> x
[1] 1 2 3 4 5
}}
#html(</div>)

*** ベクトルの要素へのアクセス [#b04cf1cb]
#html(<div style="padding-left: 10px;">)
要素番号を指定して特定の要素にアクセスする事ができる。
#myterm2(){{
> x <- 10:20
> x
 [1] 10 11 12 13 14 15 16 17 18 19 20
> x[2] <- 99
> x
 [1] 10 99 12 13 14 15 16 17 18 19 20
}}
#html(</div>)

*** ベクトルの特定の値を書き換える [#bb4d9404]
#html(<div style="padding-left: 10px;">)
要素番号を指定して特定の要素にアクセスする事ができる。
#myterm2(){{
> x <- 10:20
> x
 [1] 10 11 12 13 14 15 16 17 18 19 20
> x[x == 15] <- 999
> x
 [1]  10  11  12  13  14 999  16  17  18  19  20
}}

上記を分けて書くと以下のようになる。
※真偽値リストを条件に指定して真である要素を書き換えている。(pandasのデータフレーム等と同じやり方)
#myterm2(){{
> x <- 10:20
> x
 [1] 10 11 12 13 14 15 16 17 18 19 20
> condition <- x == 15
> condition
 [1] FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE
> x[condition] <- 999
> x
 [1]  10  11  12  13  14 999  16  17  18  19  20
}}
#html(</div>)

*** ベクトルの結合 [#mec11780]
#html(<div style="padding-left: 10px;">)
c() でベクトルを結合する事ができる。
#myterm2(){{
> x <- 1:10
> y <- 11:20
> x
 [1]  1  2  3  4  5  6  7  8  9 10
> y
 [1] 11 12 13 14 15 16 17 18 19 20
> c(x, y)
 [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20
}}
#html(</div>)

*** ベクトルの要素の追加 [#z40b1a27]
#html(<div style="padding-left: 10px;">)
append でベクトルに要素を追加する事ができる。
#myterm2(){{
> x <- 1:10
> append(x, 101:105)
 [1]   1   2   3   4   5   6   7   8   9  10 101 102 103 104 105
}}
#html(</div>)

#html(</div>)

** 行列の操作 [#g160ba11]
#html(<div style="padding-left: 10px;">)

*** 行列の生成 [#b6f7ca99]
matrix で行列を生成する事ができる。

#myterm2(){{
> matrix(1:9, nrow=3, ncol=3)
     [,1] [,2] [,3]
[1,]    1    4    7
[2,]    2    5    8
[3,]    3    6    9
> matrix(1:9, nrow=3, ncol=3, byrow=T)
     [,1] [,2] [,3]
[1,]    1    2    3
[2,]    4    5    6
[3,]    7    8    9
}}
#html(</div>)

*** 行列の要素へのアクセス [#s16ce8c5]
#html(<div style="padding-left: 10px;">)

行列の各要素へは [行No, 列No] でアクセス可能。
#myterm2(){{
> x <- matrix(1:9, nrow=3, ncol=3, byrow=T)
> x
     [,1] [,2] [,3]
[1,]    1    2    3
[2,]    4    5    6
[3,]    7    8    9
> x[2,2]
[1] 5
> x[2,2] <- 10
> x
     [,1] [,2] [,3]
[1,]    1    2    3
[2,]    4   10    6
[3,]    7    8    9
}}

以下のように、特定の値を変更する事も可能。
#myterm2(){{
> x <- matrix(1:9, nrow=3, ncol=3, byrow=T)
> x
     [,1] [,2] [,3]
[1,]    1    2    3
[2,]    4    5    6
[3,]    7    8    9
> x[x == 1 | x == 8] <- 999
> x
     [,1] [,2] [,3]
[1,]  999    2    3
[2,]    4    5    6
[3,]    7  999    9
}}

以下の例では偶数値を "even!" に書き換えている。
#myterm2(){{
> x <- matrix(1:9, nrow=3, ncol=3, byrow=T)
> x
     [,1] [,2] [,3]
[1,]    1    2    3
[2,]    4    5    6
[3,]    7    8    9
> x[x %% 2 == 0] <- "even!"
> x
     [,1]    [,2]    [,3]   
[1,] "1"     "even!" "3"    
[2,] "even!" "5"     "even!"
[3,] "7"     "even!" "9"   
}}

[[pandasのデータフレームと同じ様に>pandas入門]] Bool値のリストを作って真となるの要素を書き換える事も可能。
#myterm2(){{
> x <- matrix(1:9, nrow=3, ncol=3, byrow=T)
> x
     [,1] [,2] [,3]
[1,]    1    2    3
[2,]    4    5    6
[3,]    7    8    9
> x[x %% 2 == 0 -> even]
[1] 4 2 8 6
> even
      [,1]  [,2]  [,3]
[1,] FALSE  TRUE FALSE
[2,]  TRUE FALSE  TRUE
[3,] FALSE  TRUE FALSE
> x[even] <- "even!"
> x
     [,1]    [,2]    [,3]   
[1,] "1"     "even!" "3"    
[2,] "even!" "5"     "even!"
[3,] "7"     "even!" "9"
}}
#html(</div>)

*** 行列の結合 [#z1e96e61]
#html(<div style="padding-left: 10px;">)
rbind または cbind で行列を結合する事ができる。
※rbindは縦に行を結合、cbind は横に列を結合。

#myterm2(){{
> x = matrix(1:9,ncol = 3, nrow =3)
> y = matrix(11:13, ncol = 3, nrow =1)
> z = matrix(21:23, ncol = 1, nrow =3)
> x
     [,1] [,2] [,3]
[1,]    1    4    7
[2,]    2    5    8
[3,]    3    6    9
> y
     [,1] [,2] [,3]
[1,]   11   12   13
> z
     [,1]
[1,]   21
[2,]   22
[3,]   23
> rbind(x, y)
     [,1] [,2] [,3]
[1,]    1    4    7
[2,]    2    5    8
[3,]    3    6    9
[4,]   11   12   13
> cbind(x, z)
     [,1] [,2] [,3] [,4]
[1,]    1    4    7   21
[2,]    2    5    8   22
[3,]    3    6    9   23
}}
#html(</div>)

#html(</div>)

** リストの操作 [#e0f640a6]
#html(<div style="padding-left: 10px;">)

ベクトルや行列などの異なる構造のデータを集めて 1 個のオブジェクトに纏める場合にはリストを使用する。

*** リストの生成 [#uae6f52c]
#html(<div style="padding-left: 10px;">)
#myterm2(){{
> x <- 1:10
> y <- 101:110
> list(x, y)
[[1]]
 [1]  1  2  3  4  5  6  7  8  9 10

[[2]]
 [1] 101 102 103 104 105 106 107 108 109 110
}}
#html(</div>)

*** リストの要素へのアクセス [#vfe27bbe]
#html(<div style="padding-left: 10px;">)
リストの要素には [要素番号] または [[要素番号]] でアクセスする事ができる。
[要素番号] でアクセスした場合の戻り値はリスト、[[要素番号]]でアクセスした場合の戻り値は要素の内容そのものとなる。
#myterm2(){{
> l = list(1,2,3)
> l[1]
[[1]]
[1] 1

> l[[1]]
[1] 1
}}

#html(</div>)

#html(</div>)

** データフレームの操作 [#wb69ca70]
#html(<div style="padding-left: 10px;">)
データフレームを使用すると異なる型のデータをまとめて1 つの変数として持つ事ができる。
単純な行列と違い、各行/列はラベルを持ち、ラベル指定による操作が可能。
列のデータ型が異なっていても扱える為、ベクトルやリストをデータフレームに変換することで統計解析がやりやすくなる。

*** データフレームの生成 [#cbd6ee33]
#html(<div style="padding-left: 10px;">)
#TODO
#html(</div>)

*** データフレームの生成 [#z0b8967f]
#html(<div style="padding-left: 10px;">)
#TODO
#html(</div>)

#html(</div>)

** その他の関数 [#n077d4df]
#html(<div style="padding-left: 10px;">)
cbind
scan
save
load
rm
as.character
as.integer
| 関数名 | 説明 |
| scan | |
| save | |
| load | |
| rm | |
| as.character | |
| as.integer | |
#html(</div>)


トップ   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS