生物系のためのR超入門 (1) 【四則演算とデータ型】

#0.はじめに
生物系の学問を専攻し、プログラミングに触れる機会がなかったのですが
「生物系でもRは使えたほうがいい」という友人のアドバイスをきっかけに
2019年12月からRにチャレンジしています。
まだまだ初学者で難しいコードは書けませんが、これからRを始める方々が生物系の実験で最低限使う統計ができる一助になれたらと思いこの記事を書き始めます！

##0-1. こんな人に読んでほしい！
- Rに触れるのははじめて
- まじでプログラミングをやったことない
- 標準誤差やt検定などを学んだばかり
- 統計はRメインでやってみたい

##0-2. この記事の到達目標
- 簡単なコードが打てる
- 四則演算ができる
- 変数をあつかうことができる
- データ型を理解する

##0-3. 新しく登場する関数
- `class()`
 - 引数(※)のデータ型を調べます。
- `as.character()`
 - 引数を文字列に変換します。
- `as.numeric()` 
 - 引数を数値に変換します。
- `as.factor()`
 - 引数を要因に変換します。
- `is.character()`
 - 引数が文字列であるか確認します。
- `is.numeric()` 
 - 引数が数値であるか確認します。
- `is.factor()`
 - 引数が要因であるか確認します。

※ 引数：括弧内に入れるもの

#1. Rstudioのインストール
まずは、RとRstudioのインストールを行いましょう。
この作業については以下の記事様がお詳しいので、こちらをご覧ください。

https://qiita.com/yasainiki/items/382736604488fabbfa75

#2. 四則演算
Rでは電卓のような四則演算が可能です。電卓と異なるのは、すべて**コード**つまりプログラミング言語を用いて演算を行う点ですが、そう難しいことではありません。
まずはじめに、コンソール（コードを入力する画面）の`>`の場所に以下のコードを入力してください。
意外と重要なのは**英数半角**で入力することです。全角になっていないか気をつけてくださいね。
入力が打ち終わったらエンターキーを押し、実行してください。
`[1]`の後ろに`2`と表示されたら完璧です。`[1]`はあんまり気にしないでください。

```R
> 1+1
[1] 2
```
和算だけでは面白くないですから、他にもいろいろやってみましょう。
和差積商の他にもカッコの計算や指数の計算も可能です。

```R
> 10-5
[1] 5
> 2*12
[1] 24
> 13/5
[1] 2.6
> (1+2)*4
[1] 12
> 2^3
[1] 8
```

#3. 変数を使ってみる
変数は非常に便利なものです。数学においてxやyにいろいろな数を代入したり、f(x)に関数を代入したりすることと似たようにプログラミングでも変数にいろいろ代入します。
まず、変数`x`に`10`を代入してみましょう。代入するときは`<-`という記号を用います。

```R
> x<-10
```
代入しただけだとなにも起こりませんが、変数名を入力して実行すると、代入されたものが実行されます。

```R
> x
[1] 10
```
さらにこの`x`にまた違う数を代入し、再度実行すると情報が上書きされていることがわかります。

```R
> x<-100
> x
[1] 100
```

変数名はアルファベットを用いて自由につけることができます。1文字でもいいですし、単語でも大丈夫です。ただし、空白があるとエラーになってしまうので、変数名を区切りたいときはアンダーバー`_`などを用います。

変数に数字を代入した場合は、変数名同士で演算することも可能です。
小学生の文章問題をRでやってみるとこんな感じになります。
また、ここで登場する`#`以下の文章は、`コメント`といいわれるもので、コードを書いている最中のメモのような感じで書いています。コードの進行に影響はありません。

```R
> #ミカンは1コ100円です。
> price_of_mikan<-100
> #リンゴは1コ200円です。
> price_of_apple<-200
> #ミカンを５コ、リンゴを３コ買いました。
> number_of_mikan<-5
> number_of_apple<-3
> #あわせていくら？
> total_price<-price_of_mikan*number_of_mikan+price_of_apple*number_of_apple
> total_price
[1] 1100
```
変数には数字以外にもコード、文字列、ベクトル、データフレーム等々いろいろなものを代入できます。文字列は次項、ベクトル等は次回で詳しく扱います。

```R
> greeting<-"konnichiha"
> greeting
[1] "konnichiha"
> vector<-c(1:3)
> vector
[1] 1 2 3
```
#4. 基本的なデータ型
聞きなれない言葉だと思いますが、データ型とは**見えない単位**とでもいえばいいでしょうか。
例えば`10`というものは「リンゴが10個」や「長さが10㎝」など、**数値**を表すことがほとんどですが、場合によっては「10月」や「出席番号10番」など、**固有名詞**として扱う場合もあります。こうしたぱっと見ではわからない部分を**データ型**という形で保持しています。「10月が10個で100月」なんて計算ができないように、データ型が異なるとうまくコードが実行できないなどの問題がしばしば発生しますので、よく理解しましょう。
ある変数や値のデータ型を知りたい場合は、`class()`関数を用いて調べることができます。`()`の中（**引数**と言います）に調べたいものを入力し、実行するとデータ型を返してくれます。

##4-1. `numeric` 数値
`numeric`はザ・数値で、実際の計測値や個数といったデータを保持します。R上で数字を打ち込むと基本的には`numeric`として認識されます。`class()`関数で確認してみますと
数値を入力した変数もまた、数値というデータ型を保持しています。

```R
> class(10)
[1] "numeric"
> x<-10
> class(x)
[1] "numeric"
```

##4-2. `character` 文字列
R上で文字を打ち込んだとき、Rにとってはそれが変数名なのか文字列なのか判断できないので、人間がそれを指定する必要があります。
文字列を指定するときはダブルクオーテーション`""`でくくります。
`""`のないものは変数名として認識されています。
例えば、`x<-10`を実行した後、`x`は変数名として扱われるので、代入した`10`の`numeric`型を保持しています。一方、`"x"`は変数ではなく、「x」という文字として扱われるので`character`型を保持しています。

```R
> x<-10
> class(x)
[1] "numeric"

> class("x")
[1] "character"
```
例えば電話番号やシリアル番号など、入力した数値を文字列として読み込ませたい場合がしばしば生じます。その場合は、数値をあらかじめ`""`でくくるか、`as.character()`関数を使ってデータ型を文字列に変換する方法をとることができます。
やっぱり数値に戻したい、というときは`as.numeric()`関数で数値に変換できます。

```R
> x<-"11122223333"
> class(x)
[1] "character"

> #数値として代入
> x<-11122223333
> class(x)
[1] "numeric"

> #文字列に変換後xに上書き
> x<- as.character(x)
> class(x)
[1] "character"

> #数値に変換後xに上書き
> x<-as.numeric(x)
> class(x)
[1] "numeric"
```


##4-3. `factor` 要因
Rで統計を行う際に特に重要になります。ある数値データがどのグループに該当するのかを示すラベルの役割をします。以下の例だと、**品目**が**値段**という数値データの`factor`に該当します。**備考**は**品目**と見た目上同じ文字ではありますが、グループを指定するわけではないので`factor`ではありません。

|品目  | 値段 |備考|
|:-:|:-:|---|
|みかん  |100  |傷あり|
|みかん|150|A級品|
|リンゴ  |200  |'ジョナゴールド'|
|いちご|300|アメリカ産|

単に文字列を`""`でくくっただけでは、`factor`として認識してくれないので、`as.factor()`関数を使って`factor`とします。

```R
> Item<-"mikan"
> class(Item)
[1] "character"
> Item<-as.factor("mikan")
> class(Item)
[1] "factor"
```

##4-4. `logical` 論理値
論理値は`TRUE`と`FALSE`からなります。使う機会は少ないと思いますが、関数の引数に指定したり、関数の出力結果として登場したりします。
`is.numeric()` `is.character()` `is.factor()`関数はそれぞれ引数が数値なのか文字列なのか要因なのかを確認する関数で、真であれば`TRUE`を偽であれば`FALSE`を返します。前項の`Item`について確認してみます。`Item`は先ほど`as.factor`で`factor`にしたので、`is.factor()`でのみ`TURE`が返されています。

```R
> is.numeric(Item)
[1] FALSE
> is.character(Item)
[1] FALSE
> is.factor(Item)
[1] TRUE
```

また、もう一つ`logical`は面白い性質があり、`TURE`は`1`を、`FALSE`は`0`という値も持っており、四則演算できます。

```R
> TRUE+FALSE+2*TRUE-10*FALSE
[1] 3
```

#5.次回

https://qiita.com/Surku/items/3d67f8ed6baf0ad025c2