データサイエンスのためのR速習 ~入門から機械学習まで~ 第1話
この記事のタイトルとURLをコピーする

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話では、そのうちの行列について見ていこう。

クリックでこの記事をお気に入りに追加します (後でまとめて読めます)
この記事のタイトルとURLをコピーする
生命医学の知識や進歩を無料のニュースレターで

がんをはじめとする病気やよくある症状などの医学知識、再生医療などの生命科学研究は、研究手法が大きく前進したこととコンピューターの発達なども相まって、かつてないほどの勢いで知識の整備が進んでいます。

生命医学をハックするでは、主として医師や医学生命科学研究者ではない方や、未来を担う学生さんに向けた情報発信をしています。

2週間に1回のペースで、サイトの更新情報や、それらをまとめた解説記事をニュースレターとして発行しています。メールアドレスの登録は無料で、もちろんいつでも解除することができます。

サイト名の「ハックする」には、分かってきたことを駆使し、それを応用して、病気の治療や研究などにさらに活用していこうという意味があります。

生命医学について徐々に解き明かされてきた人類の英知を受け取ってみませんか?

この記事が気に入ったら
フォローしよう

最新情報をお届けします

Twitterでも情報発信中

こちらの記事もいかがですか?
ブログランキング参加中 (クリックしていただけると励みになります)