Rはもともと統計計算ソフトとして開発されてきた経緯があるが、フリーでオープンソースであったこともあり、多数の人たちがどんどんパッケージと呼ばれる追加機能を提供し、現在でもパッケージは増え続けている。Rさえ使えれば、それらの専門家が作ったパッケージを利用可能であり、ほとんど全ての統計計算ができる。
近年では機械学習や深層学習といった人工知能のパッケージも開発されていて、データサイエンスの現場では非常に重宝されているツールの1つだ。
管理人の専門領域の1つである生物学と情報学の融合分野「バイオインフォマティクス」においても、Rが使いこなせるというのは必須である。
これまで多数の生物学系の研究者からRやデータサイエンスについて相談を受けた経験を生かし、ここにR速習コースを用意した。
対象としているのはRやデータサイエンスを勉強したいがまだあまり経験のない、非エンジニアの方々である。
この記事の内容
Rの基本操作
四則演算
+, –記号は算数と同じ意味である。かけ算は*記号、割り算は/記号になるのは、エクセルと同じである。
算数と同じく*や/が優先されるが、かっこを使って計算順番を変えることもできる。
累乗は^記号で表す
# 1行ずつ実行する。その行にカーソルを合わせcontrolとEnterキー同時押し。 # 左下のConsoleに結果が出力される 1+2 9.2 + 3.1 6 - 2 2/3 100*2 + 80/4 100 * (2+80) /4 4^4 # 4*4*4*4と同じで256となる。
割り算の余りを求めるときには%を2つ重ねて%%とする。この場合は7 ÷ 3 = 2あまり1なので、1と表示される。
7 %% 3
変数の扱い
変数に代入するにはこのように<-記号を使う。この例ではaという名前をつけた変数に100と入れている。
a <- 100
変数に入れたものは他の変数と計算に使うことができる。例えば100が入っている変数aと、10が入った変数bを足すには
b <- 10 c <- a + b c
クラス
Rにはクラスという概念があり, class () 関数で調べることができる。整数と小数はnumeric classになる。
class (1) class (2.3)
文字はシングルクウォーテーション ( ‘ ) もしくは ダブルクウォーテーション ( ” ) で囲む。cという文字なら”c” とする。
文字はcharacterクラスになる。”c” は文字なのでcharacter classだが、先ほど計算した数値が入っているcはnumeric classになることに注意。
class ("c") class (c)
このように文字と数値は全く扱いが異なる。
TRUE, FALSE (どちらも大文字) で真偽を表す。このような2値形式はBooleanと言い、logical classである。TRUE, FALSEはそれぞれT, Fと頭文字1文字で表すこともできる。
class (TRUE) class (F)
ベクトル
ベクトルの定義
ベクトル (vector) はRにおける最も基本的なデータ構造の構成要素である。数学のベクトルとは少し違い、Rのベクトルは1次元の配列で、 これまで出てきたcharacter, numeric, logicalデータを保持できる。組み合わせるという意味のcombineの頭文字cを使って、要素をコンマで並べて定義できる。
例えば数値 (numeric class) のvectorを作ってみる
nvec <- c (1,2,3,4,5) nvec class (nvec)
文字列 (character) のvectorは
cvec <- c('U', 'S', 'A') cvec class (cvec)
Boolean (logical) のvectorは
lvec <- c (TRUE, FALSE) lvec class (lvec)
同じベクトルで複数のクラスを同時には使えない
複数のclassを混ぜることはできない。どちらかに統一されてしまう 。例えばBooleanとnumericを混ぜるとnumericとなる
v <- c(FALSE, 2) v class (v)
文字と数字を混ぜると文字 (characterクラス) になる
v <- c('A',1) v class (v)
もし複数のclassを一緒に使いたいならlistを使う必要がある (第2話)。
ベクトルに名前をつける
ベクトルに名前をつけるのはnames () 関数を使う。例えば気温を入れたtempベクトルに、その曜日を名前としてつけるには
temps <- c(25,22,19,23,24,27,76) names (temps) <- c('Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun') temps
ベクトルによる計算
ベクトルの四則演算
ベクトルの四則演算は要素ごとの計算になる。例えばv1を(1,2,3), v2を (4,5,6) とした場合、v1 + v2は (1+4, 2+5, 3+6) で (5,7,9) となる。v1*v2なら (1*4, 2*5, 3*6) で(4, 10, 18) の要領だ。
v1 <- c(1,2,3) v2 <- c(4,5,6) v1+v2 v1*v2
Rの組み込み関数を使った統計計算
Rの組み込み関数を使うとより簡単に計算できる。例えばベクトル要素の総和をとるにはsum ()関数、ベクトル要素の積はprod()関数で求められる。
sum (v1) # (1,2,3) の総和で1+2+3=6 prod (v2) # (4,5,6) の総積で4*5*6=120となる
標準偏差はsd()関数, 分散はvar()関数, 最大値はmax()関数, 最小値はmin()関数で取得できる。
sd (v2) var (v2) max (v2) min (v2)
簡単な統計量の要約はsummary()関数で表示できる。
v <- c(1,2,3,4,5,6) summary (v)
ベクトルの要素の取得
[]を使うとベクトルのその要素を取り出すことができる。複数まとめてとるならcで統合する。例えば、v1ベクトルの2番目の要素ならv1[2], 1・3番目ならv1[c(1,3)]とすればいい
v1 <- c(100,200,300) v1[2] v1[c(1,3)]
ある一定範囲の要素を取ることもできる (slicing)。slicingをするにはコロン(:) を使う。
v <- 1:10 # 1から10までのベクトルを作る v v[3:5] # 3から5番目の要素 v[8:10] # 8から10番目の要素
ベクトルにつけた名前で要素を取得
ベクトルvのそれぞれの要素の文字a,b,c,dと名前をつけると、v[‘a’] とすれば最初の要素を名前で取得できる。もちろんこれはv[1]と同じである。複数の名前をcでまとめて指定することも可能。
v <- c(1,2,3,4) names(v) <- c('a','b','c','d') v['a'] v[1] v[c('a', 'c', 'd')]
数値の比較
>, <記号は算数と同じ意味の比較に使える。>=, <= という等号つきの意味になる記号もある。比較が正しければTRUE, 間違いならFALSEという結果になる
5 > 6 6 >= 5
左右が等しいかどうかは=を2つ重ねて==記号を使う。等しくないは、Rで否定を表す!記号を=の前につけて!=と表記する。
5 == 5 2 != 3
マイナスの値と比較するときは注意が必要。(>, -などの間の) スペースの有無で意味が変わる。<と-の間にスペースがない<-記号は代入記号である。
var <- 1 # スペースなし。変数varに1を代入するという意味 var < -2 # スペースあり。varが-2より小さいかという意味
このように比較をする<, >, ==, !=などを比較演算子という。
比較演算子によるベクトルのフィルタリング
比較演算子はベクトルにも使える。それぞれの要素について、その比較を行う。例えば次の例では、v1の3つ全ての要素について2より大きいかという比較が行われ、FALSE, TRUE, TRUEとなる
v1 <- c(1,2,3) v1 > 2
ベクトルのフィルタリングに使うこともできる。FALSEになるものは除かれ、TRUEになるものだけが返される。次の例ではv>2の条件を満たすものだけが選択され、2, 3となる。
v[v>2]
ヘルプとコンソール
ヘルプ機能
関数の使い方が分からなくなることはよくある。そういうときにはRのヘルプ機能で調べることができる。ヘルプの表示のさせ方はいくつかある
help (vector) # vectorについて知りたい help.search ('numeric') # numericについて知りたい ?sd # sd関数の使い方を知りたい
個人的には調べたい関数名の先頭に?をつけるやり方が直感的で分かりやすいと思う。
ヘルプは右下の画面に表示される。ヘルプの一番下にはExamplesが書かれているので、この使用例を見るのがいい。
コンソールのクリア
これで第1話は終わりである。最後に、いろいろ結果が出力されている左下のコンソール部分をクリアする方法を紹介しよう。
control + Lを同時押しするだけである。
第2話について
今回の第1話ではRによる四則演算から、ベクトル構造までを紹介した。Rにはベクトルの他にあと3つの代表的なデータ構造がある。
第2話では、そのうちの行列について見ていこう。