見出し画像

【R言語】棒グラフにスターをつける if文をマスターせよ

こんにちは。プログラミング超初心者のえいこです。

今回は前回までに書いた棒グラフにスターをつけようと思います。

棒グラフを書いた投稿はこちら↓

手書きでスターをつけていると間違ってしまうことってありませんか?

私はかなりおっちょこちょいな部類なので、ちゃんと検定結果を確認してスターをつけているつもりでもスターの数に統一性がなかったり、後で見返したらスターの数が違っていたってことがあります...

せっかくプログラミングをやってるんだから、ソフトに計算してもらってスターを書いてもらいたい!

ということで、今回はRでp値を計算してもらってスターの数を決めてもらうところまでやろうと思います。

(グラフに書き込むのは次回まで持ち越しです...)

p値によってスターの数を変える

前回に引き続き、今回もプラセボと薬剤Xを処理したもののタンパク質Aの発現を比較したデータを使っていきます。

画像4

今回やりたいことは、

p値によって表示するスターの数を変える

これをRでやるためには、"if文"を極めるしかありません。

「もし、pの値が0.001よりも小さかったら"***"って書いてね。
 もし、pの値が0.01よりも小さかったら"**"って書いてね。
 もし、pの値が0.05よりも小さかったら"*"って書いてね。
 もし、pの値が0.05よりも大きかったら"ns"って書いてね。」

という感じです。

まずは、Rの"if文"と友達になる必要がありそうです。

Rのif文の特長つかもう!

Rのif文の形は基本的にこんな感じ

if (AがBならば){
    こんな処理をしてね
}

習うより慣れろ!実践的にやってみようと思います。

> a<-1
> if(a<10){
+   print("aは10より小さい")
+ }

まず、"a"という変数に1を代入しておきます。その下がif文で、「aが10よりも小さかったら"aは10より小さい"って書いてね」と"print"関数を使って指定しています。

これを実行すると...

[1] "aは10より小さい"

と出力されました。

うん、これくらいなら簡単♪簡単♪

では、もしaの値が10より大きかったらどうなるでしょう?aに12を代入して実行してみます。

> a<-12
> if(a<10){
+   print("aは10より小さい")
+ }

この下には何もprintされませんでした。

次は、「それ以外」を定義していきます。「それ以外」は"else"で表します。実際に使ってみましょう。(aの値は12のままです)

> if(a<10){
+   print("aは10より小さい")
+ } else {
+   print("aは10より大きい")
+ }

ここでは、「aが10よりも小さかったら"aは10より小さい"って書いてね」に加えて「それ以外だったら"aは10より大きい"って書いてね」という文を"else"を使って加えています。

すると...

[1] "aは10より大きい"

ちゃんと、プリントされました。ヨカッタ。

やりたいのは一つの条件ではなくて複数の条件を扱いたい!

ということで、複数の条件(分岐条件)を扱う場合は"else if"を使って条件を分岐させていくようです。

「5よりも小さい場合は"aは5より小さい"って書いてね」という文を"else if"を使って付け加えてみます。

> a<-12
> if(a<10){
+   print("aは10より小さい")
+ } else if(a<5) {
+   print("aは5より小さい")
+ }else{
+   print("aは5よりも10よりも大きい")
+ }
[1] "aは5よりも10よりも大きい"

おぉ!うまくいきそう。ではaの値を変えていろいろ試してみます。

> a<-7
> if(a<10){
+   print("aは10より小さい")
+ } else if(a<5) {
+   print("aは5より小さい")
+ }else{
+   print("aは5よりも10よりも大きい")
+ }
[1] "aは10より小さい"
> a<-3
> if(a<10){
+   print("aは10より小さい")
+ } else if(a<5) {
+   print("aは5より小さい")
+ }else{
+   print("aは5よりも10よりも大きい")
+ }
[1] "aは10より小さい"

aが7の時はうまく動いている感じですが、aが3の時は「aは5より小さい」と表示させたいのに表示されません...

if文は小さい条件から条件付けしていく

わかりやすいように、図でコードを表示してみます。

画像1

最初に規定した条件の外側が"else"と考えると、"a<10"という条件の中に"a<5"という条件が中に入ってしまっています。

なのでいくら"a<-3"や"a<-2"などの値を入れても"a<10"の時の条件が適応させれしまいます。

"else"が外側に来るようにするためには、小さい条件から規定していく必要がありそうです。

> if(a<10){
+   print("aは10より小さい")
+ } else if(a<15) {
+   print("aは15より小さい")
+ }else{
+   print("aは15よりも10よりも大きい")
+ }

こんなif文を作ってみました。まずは、10よりも小さい時の条件を規定して、15よりも小さい時の条件、それ以外の条件を順番に規定していきました。図に表すと、こんな感じです。

画像2

実際に動かしてみた結果がこちら。

> a<-3
[1] "aは10より小さい"
> a<-10
[1] "aは15より小さい"
> a<-16
[1] "aは15よりも10よりも大きい"
> a<- -10
[1] "aは10より小さい"

if文のことが少しわかってきた気がします。

最後に、p値のスターの数を規定してprintで出してみようと思います。

Rにp値のスターの数を計算してもらおう

まずは、p値の変数を作ります。

> #p値を定義する 
> pvalues<-t.test(placebo,xtreat)$p.value

「"pvalues"という変数に、placeboとxtreatの二標本t検定の結果のp値を入れて」います。"$"こちらの記事で初めて使っています。

ちゃんと、pの値が入っているか確認します。

> pvalues
[1] 0.009926739

次に、学んだif文の構造を使ってif文を作っていきます。図としてはこんな感じのイメージです。

画像3

書いてみたコードはこちら。

> #スターの数をプリントしてみる 
> if(pvalues<0.001){
+   print("***")
+ } else if(pvalues<0.01){
+   print("**")
+ } else if(pvalues<0.05){
+   print("*")
+ } else {
+   print("ns")
+ }

今回のp値を入れてみます。計算結果は...

[1] "**"

スター二つ分ですね。あとはこのif文を元に、グラフにスターを書いていこうと思います。

これは、また別の記事にまとめていきます。

それでは、また!


最後までお読みいただきありがとうございます。よろしければ「スキ」していただけると嬉しいです。 いただいたサポートはNGS解析をするための個人用Macを買うのに使いたいと思います。これからもRの勉強過程やワーママ研究者目線のリアルな現実を発信していきます。