![見出し画像](https://assets.st-note.com/production/uploads/images/21580239/rectangle_large_type_2_744859911045edc3058d6b4b98f937b8.png?width=1200)
【R言語】棒グラフにスターをつける if文をマスターせよ
こんにちは。プログラミング超初心者のえいこです。
今回は前回までに書いた棒グラフにスターをつけようと思います。
棒グラフを書いた投稿はこちら↓
手書きでスターをつけていると間違ってしまうことってありませんか?
私はかなりおっちょこちょいな部類なので、ちゃんと検定結果を確認してスターをつけているつもりでもスターの数に統一性がなかったり、後で見返したらスターの数が違っていたってことがあります...
せっかくプログラミングをやってるんだから、ソフトに計算してもらってスターを書いてもらいたい!
ということで、今回はRでp値を計算してもらってスターの数を決めてもらうところまでやろうと思います。
(グラフに書き込むのは次回まで持ち越しです...)
p値によってスターの数を変える
前回に引き続き、今回もプラセボと薬剤Xを処理したもののタンパク質Aの発現を比較したデータを使っていきます。
今回やりたいことは、
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文は小さい条件から条件付けしていく
わかりやすいように、図でコードを表示してみます。
最初に規定した条件の外側が"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よりも小さい時の条件、それ以外の条件を順番に規定していきました。図に表すと、こんな感じです。
実際に動かしてみた結果がこちら。
> 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文を作っていきます。図としてはこんな感じのイメージです。
書いてみたコードはこちら。
> #スターの数をプリントしてみる
> if(pvalues<0.001){
+ print("***")
+ } else if(pvalues<0.01){
+ print("**")
+ } else if(pvalues<0.05){
+ print("*")
+ } else {
+ print("ns")
+ }
今回のp値を入れてみます。計算結果は...
[1] "**"
スター二つ分ですね。あとはこのif文を元に、グラフにスターを書いていこうと思います。
これは、また別の記事にまとめていきます。
それでは、また!
いいなと思ったら応援しよう!
![eiko_programming](https://assets.st-note.com/production/uploads/images/19686997/profile_73db21f1d0e8ed17138d44b0d33dfea1.png?width=600&crop=1:1,smart)