Licenses

CC BY 4.0

はじめに

R言語とは、統計解析向けのフリープログラミング言語です. Rでは、統計解析に加え、データの前処理、可視化、グラフの作成、さらには機械学習などのAI解析が可能.また、拡張プログラムであるパッケージ(package)をインストールして、呼び出すことで機能を拡張できる.近年の農学・生命科学研究では、様々なビッグデータを扱う機会が増え、情報解析スキルが必要不可欠になりつつあります.本講義では、Rを用いたデータ解析に触れ、統計解析やデータ処理スキルを向上させるための、足がかりとなることを目的としています.

Rの基礎

変数

変数に値を保持させておくことができる. Rでは、代入演算子<-を使う.

#100という値を変数aに代入する
a <- 100

#200という値を変数bに代入する
b <- 200

算術演算子

Rで四則演算を行う.

#加
100+100
## [1] 200
#減
200-100
## [1] 100
#乗
100*100
## [1] 10000
#除
200/100
## [1] 2

ベクトル

複数の値をオブジェクト変数に代入する.複数の値を関数で束ねて代入する.

a <- c(100, 200, 300)
a
## [1] 100 200 300
b <- c(10, 20, 30)
b
## [1] 10 20 30
c <- c(1, 2, 3)
c
## [1] 1 2 3

ベクトルの一部だけを抽出したり、変更したりすることができる (ベクトル要素参照).

#ベクトルaの1番目を参照
a[1]
## [1] 100
#ベクトルaの1,2番目を参照
a[1:2]
## [1] 100 200

Try!:ベクトルbの3番目を参照してみよう

#ベクトルbの3番目を参照


#ベクトルcの1から3番目を参照


#

行列

同じ長さのベクトルを複数束ねてできるオブジェクト.

rbind関数:ベクトルを行方向に束ねる.

cbind関数:ベクトルを列方向に束ねる

#rbind
r.matrix <- rbind(a ,b, c)
r.matrix
##   [,1] [,2] [,3]
## a  100  200  300
## b   10   20   30
## c    1    2    3
#cbind
c.matrix <- cbind(a ,b, c)
c.matrix
##        a  b c
## [1,] 100 10 1
## [2,] 200 20 2
## [3,] 300 30 3

行列の要素を参照するには、行番号と列番号の両方を指定する必要がある.

#1行目と2,3列目を参照
r.matrix[1,2:3]
## [1] 200 300
#1,2行目と2,3列目を参照
r.matrix[1:2,2:3]
##   [,1] [,2]
## a  200  300
## b   20   30

データフレーム

データフレームは、行列と同じく2次元配置のデータである.行列は各要素が同じ単位 (数値データ) であるのに対し、データフレームは列ごとに属性が異なることもある (数値データや文字列データ).農学や生命科学のビッグデータでは、様々な情報をメタ情報として記述して関連付けるため、データフレーム構造で扱うことが多い.

データフレームを作成するときは、data.frame関数を使用する.行列作成のときに使用したcbindrbindでは、異なる属性を束ねることができない.データフレームは列ごとに意味が異なり、列を重視したデータ構造なので、各列に列名をつける必要がある.

#データフレームの作成
d <- data.frame(Plant=c("rice","rice","maize","maize","soybean","soybean"),
                height=c(100,105,150,155,72,75),
                weight=c(30,31,56,59,40,43))

#データフレームの確認
head(d)
##     Plant height weight
## 1    rice    100     30
## 2    rice    105     31
## 3   maize    150     56
## 4   maize    155     59
## 5 soybean     72     40
## 6 soybean     75     43

行列と同様にデータフレームの要素も参照できる.データフレームから特定の列を取り出す際は、$あるいは[[]]を使用できる.

#'Plant'列をベクトルとして取り出す.
d$Plant
## [1] "rice"    "rice"    "maize"   "maize"   "soybean" "soybean"
#'Plant'列をベクトルとして取り出す.
d[['Plant']]
## [1] "rice"    "rice"    "maize"   "maize"   "soybean" "soybean"

Try!:データフレームdheight列をベクトルとして取り出してみよう.

#データフレームdの'height'列をベクトルとして取り出す.

#

統計計算

Rは統計解析向けに開発されたプログラミング言語であるので、統計計算に関連した関数が多く標準実装されている.

#ベクトルxを作成
x <- c(10,5,4,2,13,16,2,20,17,24)

#平均値
mean(x)
## [1] 11.3
#不偏標準偏差
sd(x)
## [1] 7.902883
#不偏分散
var(x)
## [1] 62.45556
#総和
sum(x)
## [1] 113
#最大値
max(x)
## [1] 24
#最小値
min(x)
## [1] 2
#標準化(平均0, 分散1)
scale(x)
##             [,1]
##  [1,] -0.1644969
##  [2,] -0.7971775
##  [3,] -0.9237136
##  [4,] -1.1767858
##  [5,]  0.2151114
##  [6,]  0.5947197
##  [7,] -1.1767858
##  [8,]  1.1008641
##  [9,]  0.7212558
## [10,]  1.6070085
## attr(,"scaled:center")
## [1] 11.3
## attr(,"scaled:scale")
## [1] 7.902883

ファイル読み込み

プログラミング言語でデータ解析する場合は、Excelファイル (.xlsx) のままでは非常に不便である.Excelファイルからcsvファイル (カンマ区切り) txtファイル (タブ区切り) を書き出して、Rに読み込ませて解析するのが一般的である.

ここでは、read.csv関数を用いて、csvファイルを読みこんでみる. デモデータとして、コマツナを様々な栄養欠乏条件で栽培した際の多元素濃度 (イオノーム) データがまとめられたcsvファイル demo.csv を読み込んでみる.

実習では、まずはdemo.xlsxからcsvファイルに変換する.

read.csv関数により、Rの環境にcsvファイルを読み込むことができる.

demo <- read.csv("demo.csv", header=TRUE)

データフレームdemoの中身を確認する.

head(demo, n=15)
##    Treat   Rep         Fe        Na          B          P        S        Ca
## 1    Std Rep01 0.09481312 16.076795 0.07930618  9.4327732 10.92939 19.314412
## 2    Std Rep02 0.08932892 14.163738 0.06197673  9.8153212 10.30166 15.352856
## 3    Std Rep03 0.10005974 15.718683 0.08554246  9.3380930 11.97617 18.063103
## 4      N Rep01 0.07535019 12.584512 0.05229767 13.8565924 13.18467 10.039218
## 5      N Rep02 0.08693794 13.992503 0.05516513 19.5483794 14.11175  8.905536
## 6      N Rep03 0.08092294 12.632017 0.06049191 15.5223570 13.25826 10.278994
## 7      P Rep01 0.08622586  2.767855 0.05739839  0.6183986 11.86336 22.211159
## 8      P Rep02 0.08107114  2.977823 0.05339402  0.6698599 11.37364 21.684903
## 9      P Rep03 0.06972961  1.789636 0.05976988  0.4481839  8.64475 20.592863
## 10     K Rep01 0.08181240 25.594229 0.05412227  9.2058854 10.09829 13.448803
## 11     K Rep02 0.09344541 33.274509 0.06278996 12.4690111 16.53377 16.499155
## 12     K Rep03 0.09965489 38.623781 0.05705951 15.1221131 12.34238 20.415112
##             Cu         K        Mg         Mn         Zn
## 1  0.010395988 23.439857  9.757136 0.19049360 0.03756928
## 2  0.012495419 22.060630  8.142979 0.12428257 0.04113925
## 3  0.011270539 22.282309 11.541282 0.14446892 0.03413688
## 4  0.006775211 27.771476  7.358915 0.06824218 0.04017418
## 5  0.010101116 36.071357  7.795506 0.06217537 0.04126521
## 6  0.007036593 31.856272  6.982254 0.06697018 0.03938937
## 7  0.009964220 26.148062  9.012373 0.09572924 0.03306126
## 8  0.010182996 24.114418  9.379686 0.10459242 0.05073276
## 9  0.007162169 18.965070  8.435706 0.10866515 0.02893293
## 10 0.008051661  2.068095  7.575256 0.19547925 0.02637648
## 11 0.011003985  3.388715 10.614643 0.24899681 0.02147007
## 12 0.012155329  2.744865 11.427772 0.16620924 0.01936425