R言語は、統計解析向けのプログラミング言語及びその開発実行環境。
以下の URLからインストーラをダウンロードしてインストール
変数への代入は <- または -> で行う。
以下は、1〜5までの連続した値のベクトルを生成し、x という変数に代入している。
> x <- c(1:5) > x [1] 1 2 3 4 5
複数の変数に代入する事も可能
> 1:5 -> x -> y > x [1] 1 2 3 4 5 > y [1] 1 2 3 4 5
左辺と右辺は入れ替える事も可能
> x <- y <- 1:5 > x [1] 1 2 3 4 5 > y [1] 1 2 3 4 5
n:m と記述する事で連続した値を生成する事ができる。
> 1:5 [1] 1 2 3 4 5
開始値, 終了値, 増分 を指定して値を生成する場合は seq を使用する。
> seq(1, 5, 2) [1] 1 3 5
任意の値をN個分繰り返すには rep を使用する。
> rep(1, 5) [1] 1 1 1 1 1
値には ベクトルを指定する事もできる。
> rep(1:3, 5) [1] 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3
ベクトルの生成は c() で行う。
> x <- c(100,200,300) > x [1] 100 200 300
別ファイルに保存したスクリプトを読み込むには source を使用する。
test.R
x = c(1:5)
実行例
> source("test.R") > x [1] 1 2 3 4 5
> x <- 1:5 > print(x) [1] 1 2 3 4 5
書式付きでオブジェクトを表示する場合には sprint を使用する。
> sprintf("%3.2f", 123.456) [1] "123.46"
cat を使用すれば文字列をダブルクォーテーションなしで表示できる。
> str1 = "ABCDEFG" > cat(str1) ABCDEFG
str を使用すると、オブジェクトの内容をデータ型などの情報付きで表示できる。
> str1 = "123" > str(str1) chr "123"
file
write
writeLine
write.csv
read.table
write.table
write.xlsx()
write.xlsx2()
> x = 10 > if (x > 5) { + print("x > 5") + print(x) + } else { + print("x <= 5") + print(x) + } [1] "x > 5" [1] 10
繰り返し処理には for文が使用できる。
ただし R の for文は遅いので処理を関数化して apply系で記述する方が高速に動作する。
> for (i in 1:5) { + print(i) + } [1] 1 [1] 2 [1] 3 [1] 4 [1] 5
> paste("abc", "def", sep="") [1] "abcdef"
c() でベクトルの生成を行う事ができる。
> x <- c(100,200,300) > x [1] 100 200 300
連続した値のベクトルであれば n:m でも生成可能。
> x <- 1:5 > x [1] 1 2 3 4 5
要素番号を指定して特定の要素にアクセスする事ができる。
> 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
要素番号を指定して特定の要素にアクセスする事ができる。
> 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のデータフレーム等と同じやり方)
> 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
c() でベクトルを結合する事ができる。
> 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
append でベクトルに要素を追加する事ができる。
> x <- 1:10 > append(x, 101:105) [1] 1 2 3 4 5 6 7 8 9 10 101 102 103 104 105
matrix で行列を生成する事ができる。
> 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
行列の各要素へは [行No, 列No] でアクセス可能。
> 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
以下のように、特定の値を変更する事も可能。
> 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!" に書き換えている。
> 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のデータフレームと同じ様に Bool値のリストを作って真となるの要素を書き換える事も可能。
> 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"
rbind または cbind で行列を結合する事ができる。
※rbindは縦に行を結合、cbind は横に列を結合。
> 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
cbind
scan
save
load
rm
as.character
as.integer