統計・R

【STEP1-2】Rの基本コードを覚えてコードの骨格が理解できるようになろう

2022-04-30

やあ、こんにちは!この記事はRでプログラミングを行うときに、誰かのコードをマネできるようになるのを目指そう!っていうシリーズの2つ目の記事だよ!前の記事では基本的な用語を紹介したから、この記事に書いてある用語が分からないよって人は、先に目を通しておくといいよ!

この記事では、見ていて意味不明なプログラミングコードの骨格を知るために必要な基本コードを教えるよ!これを理解するだけで、誰かが書いた良く分からないコードも、全体の構造が理解できるようになって、頭の中がスッキリすると思うので、完全保存版!慣れるまでは印刷して手元に置いてもいいくらいだよ!

この記事のまとめ

  • 基本コードはプログラミングの構造を知るために必要なコード。これを知っていると、コードの全体像が分かるよ!
  • ここで紹介したコードは覚えておいて損はないコードばっかり!
  • 大事なのはコードを見て、プログラムの構造をイメージできるようになること!

基本コード 10個

=

イコールです。小学校1年生でもならうお馴染みの記号だね!Rではオブジェクトを定義(インプット)するとき、オプションを指定するときなどに出てくるよ。オブジェクトを定義するときは、"<-" というコードと入れかえ自由!感覚では、"<-" のほうがよく使われるけれど、知らないと、この"=" はどういう意味なんだろう?ってなるので、使い方は知っておくといいよ。オブジェクトを定義するときにはイコールの左側に定義したオブジェクトの名前を、右側にインプットするデータや関数を書くよ。

一方で、関数のオプションなどを指定する場合には、オプションの名前を左に、オプションの指示内容をイコールの右に書くんだ!ちなみに、 “等しい” という意味の演算記号はイコールを2つつなげた、 “==” がR言語では利用されるので、注意してね!

df = iris
read.table(“clipboard”, header = TRUE)
iris[iris$Species == "setosa", ]

<-

オブジェクトを定義するときに使うコード。"<-"というコードの形が左向きの矢印だと思ってね。左側にオブジェクト名を、右側にオブジェクトにインプットするデータや関数などを書くよ。

df <- iris

#

読み取れないコードの印。

"#"が付いた行では、"#"記号よりも右にある文字はコードとして読まれなくなるんだ。だから、コードの説明やメモを残したい時などに “#” を上手に使うと読みやすく、後から、他の人が見ても理解しやすいコードが書けるようになるよ!

コードを書くのを上達させるには、"#"記号もうまく使って説明なしに他の人が見ても理解できるコードを意識するといいね!

iris # サンプルデータ “iris” の出力

data[ ], data_frame[ , ]

ここからは、説明がちょっと難しくなってくるよ~。でも、内容は超簡単だから心配しないで。

まず、オブジェクト名の後についている[ ]マークの説明だ!これは、データフレーム(簡単に言うと表のことね!)などの中身を指定するときに使う記号なんだ!たとえば、1, 3, 5, 7っていうデータをdataっていう名前のオブジェクトに入れるとするよ。これを、コードで書くと下記のようになる。

# 1, 3, 5, 7をdataというオブジェクトに格納
data <- c(1, 3, 5, 7)

このdataに含まれる2番目のデータ(3のことだよ!)を指定したいときには、data[2]と書けばいい!それだけ!カンタンでしょ!

もしも、オブジェクトが表だった場合には、行と列があるので、data[a, b]って感じで書くと、a行目、b列目のデータを指定することになるよ!

こんな感じで[ ]が出てきたときには、 “オブジェクトの名前”と[ 行番号, 列番号] っていうセットだからね。最初に "オブジェクトの名前" でその後の[ ]でオブジェクトの中のデータを指定しているって考えればいいんだよ!このデータの構造をイメージすることがとっても大事!イメージさえつかめれば、無理に覚えなくてもOK、何度も目に付くので自然に覚えるから心配しないでね!

iris[1, 2] # irisというサンプルデータの1行2列目のデータを指定

$

このドル($)マークは[ ]と同じようにオブジェクトの中身を指定するときに使う記号なんだ!

表だったら列の名前(行ではないので注意だよ!)、リストだったらリストに含まれるデータに名前がついているよね?その場合には、列やリストの名前でデータの中身を指定した方が便利って言うときがある!だって、何番目のデータなんて毎回数えるのは大変だし、データの中身を並び替えたりして変えてしまうと間違いのもとになるからね!

そこでこの$マークを使うんだ!"オブジェクト名" の後に "$"、そして "列の名前" やリスト内の "データの名前" などを入力するんだ!

ここでもやっぱりコード全体のイメージをちゃんとつかむことが大切で、オブジェクトがあって、その中のデータを "$" で指定しているんだなってピンとくればOK!

iris$Sepal.Length # irisというサンプルデータのSepal.Lengthという列を指定

:

次はあまり存在感がないけど重要な:マークだ!これはシンプル、~(から)という意味だよ!たとえば1:100と書いてあったら、1~100のことってわけ!カンタンだよね!

iris[1:50, ] # irisというサンプルデータの1から50行目を指定

function_name()

次は関数だよ。Rは統計処理ソフトだから、当然関数だらけ!めちゃくちゃ簡単な関数から、複雑な関数まで上げればきりがないんだ。でも、型だけは覚えておこう!

関数は、関数の名前が書いてあって、その後に ( ) が付くんだ!エクセルを使っている人は同じ形なのでイメージがわきやすいかもしれないけれど、( ) の中身は関数によって全く異なるよ!なのでここではあまり細かい説明はしないけれど、何か書いてあって、その後に ( ) がある時は、関数だっていうことが先ずはパッと見で分かることが大切だよ!

sum( c(1, 3, 5, 7)) # 1, 3, 5, 7の合計を計算
colnames(iris) # irisの列の名前を表示
cor.test(A, B) # AとBの相関解析を行う

A %>% function_name()

続いて、パイプライン演算子というものを紹介するよ!これはdplyrというRで最もよく使われるパッケージに入っているコードで、全くの初心者は使いこなせる必要はないかな~。でも、インターネットで解析方法を調べていると当たり前のように登場するので、コードの意味(読み方)だけは知っていると良いと思い、基本コードの中に入れました。

正直なところ、サンプルコードをインターネットで公開している人の中には、パイプ演算子を使えない人には人権を与えないっていう冷たいヒトがいるんだ・・・。

だから、ちょっと頑張ろう!

パイプ演算子%>%というのはオブジェクト名や関数などの後に、%>%という記号を付けて、別の関数を書くという構造になるよ。

オブジェクトなど %>% 関数( )

たぶん、コードにちょっと慣れてきたら、これは何となく分かると思う!普通はオブジェクト名や関数のコードを読むとその中身や結果が出力されるよね?でも、オブジェクト名や関数の後にパイプ演算子%>%が付くと、その中身や結果が出力されずに、次の関数の一番最初の値(因数)として入力されるんだ。たとえば、

install.package("dplyr") # dplyrパッケージのインストール
library(dplyr) # dplyrパッケージの読み込み
iris$Sepal.Length %>% mean() # %>%コードを使用して平均の計算

っていうコードがあったら、これは、前半のコードでiris(サンプルデータ)のSepal.Lengthの列を指定し、後半のmean( ) という関数に代入しているんだ!だから、irisのSepal.Lengthの平均値を計算しろ!っていう意味になるんだ。何となくわかった?実はこれは、

mean(iris$Sepal.Length)

Sepal <- iris$Sepal.Length
mean(Sepal)

などのコードとやっていることは同じなんだ!無理して使えなくてもいいよ~!って言ったのはこういう理由!コードを書くときには自分が書きやすいコードで初めは書いて行こう!

でも、このパイプ演算子、実はとっても便利で、コードを分かりやすくしてくれるんだ。たとえば、mean(iris$Sepal.Length) っていうコードは、頭の中では、最初にirisのSepal.Lengthという列を指定していて、その結果をmeanという関数に代入しているんだよね?つまり頭の中では①irisのSepal.Lengthを指定、②平均の計算、という流れで動いているのに、コードは逆の順番で書かれているんだ。プログラミングが複雑になっていくと関数の中に関数があって、さらに関数がある、なんて言うこともときどき出てくるけれど、頭の中の流れと書いているコードの順番が違っていると分かりにくいでしょ?

パイプ演算子%>%は思考の流れとコードの記載が近いので、見直した時にとてもスッキリと理解できるんだ!プログラミングコードは後から見直すときや、他人に見せても理解しやすいように書くことがとっても大事なので、パイプライン演算子%>%は超優秀!ってわけ!

もう一つパイプ演算子%>%のメリットは、

Sepal <- iris$Sepal.Length
mean(Sepal)

みたいなコードを書くと、分かりやすいんだけど、どんどんオブジェクトが増えていくんだ!そのうち自分でも分からなくなるくらいにオブジェクトが増えてしまうと間違いのもとでもあるので、パイプ演算子%>%を使うっていうこともあるね!

package_name::function_name()

次はときどき出てくる::という謎コード。これも使いこなせる必要はほとんどないけれど、インターネットで解析方法を調べるとときどき出てくるので、意味は知っておきたいコードだよ!ただ、こいつは超カンタン!パッケージ名::関数という構造で使われるんだけど、このパッケージに含まれるこの関数という意味なだけ!つまり、基本的には補足説明的にパッケージ名を入れてくれているだけなんだ。

ただ、色々なパッケージを使っていると同じ関数の名前が別々のパッケージで使われていることがあって、その場合にはエラーになっちゃうから、このコードを使わないといけないね!まあ、初めのうちはそんなこともほとんどないと思うからまずは意味を知っておくだけで大丈夫!

dplyr::filter(iris, Sepal.Length > 6) # dplyrパッケージのfilter関数を使用

?, help()

最後にヘルプを教えるよ!

“?” の後に関数などを書いて出力するとヘルプ画面が出力されるよ!また、help( )と関数で出力しても同じ!

最初はこのヘルプ画面を見ても、あまり良く分からないから、ちっとも助からないんだけど、インターネットや書籍の説明で細かい説明が足りないときなんかに使うと良いよ!あとは、ほんのちょっとだけ確認したい場合も使えるね!オプションを指定するときは””を使うかどうか?オプションの英語のスペルを忘れちゃった!オプションの最初の文字は大文字?小文字?な~んてことは、しょっちゅうなので、そのたびにインターネットで探し回っているのも時間がもったいないので、ヘルプを上手く使おう!

?iris # iris(サンプルデータ)の説明を開く
help(iris) # iris(サンプルデータ)の説明を開く

さいごに

今回教える基本コード10はここまで。使い始めるとあれもこれもってなると思うけれど、先ずは今回紹介した10の基本コードを理解しておこう!無理に使いこなそうとする必要はないからね!とにかく意味が分かれば、誰かが書いたサンプルコードの理解がぐっと進むんだ!これがめちゃくちゃ重要!

ここで紹介したコードは、自然と使えるようになるから!まずはコピペを駆使してプログラミングができるようになることを目指そう!

  • この記事を書いた人

Pon

食品会社勤務の元企業研究員(PhD)。食の機能性研究、腸内細菌の研究をメインにしていました。興味関心は公衆衛生、疫学、食品の機能性。好きな食べ物はカレーと杏仁豆腐。コテンラジオ、キングダムが好きです。統計の専門家に憧れます。興味のある研究について、Xやブログで発信しています。

-統計・R
-,

© 2022 Pon Powered by AFFINGER5