R 使い方 データ構造まとめ スクリプトの書き方

バイオインフォ道場、くまぞうです。

Rのデータ構造は、他のプログラミング言語でよくみかけるデータ構造とは少し異なるように感じるかもしれません。しかし、基本的な構造を理解すれば、Rはもっと使いやすいツールになるかもしれません。

スポンサーリンク



Rのデータ構造

ベクトル

ベクトルは、最も基本的な構造をしています。数値や文字などの1種類のデータを順番に保持する1次元構造のデータです。

生成とアクセス

一番簡単な生成方法は、c結合関数を使ってデータを列挙する方法です。データへのアクセスは、インデックスを指定します。注意すべき点は、他の言語のように、インデックスが0から始まらず、先頭をインデックス番号1としてアクセスするという点です。

ベクトルの生成

R > my_data <- c(1, 2, 3)
R > my_data
[1] 1 2 3

ベクトルへのアクセス

R > my_data[1]
[1] 1
R > my_data[2]
[1] 2

リスト

リストは、各項目にたいして名前をつけたベクトルです。数値や文字などを混ぜてデータを管理できます(リスト内にリストを作ることもできます)。

生成とアクセス

リストの生成は、list関数を使ってデータを列挙します。データへのアクセスは、名前やインデックスを使ってアクセスできます。

リストの生成

R > my_data <- list(name="kumazou", age=100, animal=TRUE)
R > my_data
$name
[1] "kumazou"
$age
[1] 100
$animal
[1] TRUE

リストへのアクセス

R > my_data[1]         # インデックス
$name
[1] "kumazou"
R > my_data$name       # 名前
[1] "kumazou"
R > my_data[["name"]]  # 名前
[1] "kumazou"

行列

行列は、数値や文字などの1種類のデータを2次元配列として保持するデータ構造です。

生成とアクセス

行列の生成は、matrix関数を使います。データへのアクセスは、行と列のインデックスや名前を使ってアクセスできます。

行列の生成

R > my_data <- matrix(sample(12), 3, 4)  # 3行4列
R > my_data
     [,1] [,2] [,3] [,4]
[1,]    5   12    8   10
[2,]    9    1    7   11
[3,]    4    3    6    2

R > dimnames(my_data) <- list(c('a', 'b', 'c'),       # 行名
			      c('d', 'e', 'f', 'g'))  # 列名
R > my_data
  d  e f  g
a 5 12 8 10
b 9  1 7 11
c 4  3 6  2

行列へのアクセス

R > my_data[10]        # 列方向に数えていって10番目
[1] 10
R > my_data[1, 4]      # 行・列を指定
[1] 10
R > my_data['a', 'g']  # 行・列を指定(名前)
[1] 10

配列

配列は、行列と同様の多次元のベクトルで、2次元以上に拡張されたデータ構造です。

生成とアクセス

配列の生成は、array関数を使います。データへのアクセスは、行列同様、行と列・次元のインデックスや名前を使ってアクセスできます。

行列の生成・アクセス

R > my_data <- array(1:24, c(2, 3, 4))
R > my_data
, , 1

     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6

, , 2

     [,1] [,2] [,3]
[1,]    7    9   11
[2,]    8   10   12

, , 3

     [,1] [,2] [,3]
[1,]   13   15   17
[2,]   14   16   18

, , 4

     [,1] [,2] [,3]
[1,]   19   21   23
[2,]   20   22   24

R > my_data[2, 2, 2]
[1] 10

データフレーム

データフレームは、「名前付けされたベクトルの列」を並べたリストです。外部ファイルを読み込んだ場合、データフレーム形式として利用することが多く、統計やバイオインフォマティクス解析処理でもっとも利用されるデータ構造の1つです。

生成とアクセス

データフレームの生成は、data.frame関数を使います。名前付けされたベクトルとして列毎にデータを列挙し、並べます。データへのアクセスは、行列同様、行と列のインデックスや名前を使ってアクセスできます。また、列毎のデータについては、$を使った名前で参照出来ます。

データフレームの生成

R > my_data <- 
    data.frame(name=I(c("kumazou1", "kumazou2", "kumazou3")),
               age=c(101, 102, 103),
               color=c("red", "green", "yellow"))
R > my_data
      name age  color
1 kumazou1 101    red
2 kumazou2 102  green
3 kumazou3 103 yellow

R > str(my_data)
'data.frame':	3 obs. of  3 variables:
 $ name :Class 'AsIs'  chr [1:3] "kumazou1" "kumazou2" ...
 $ age  : num  101 102 103
 $ color: Factor w/ 3 levels "green","red",..: 2 1 3

データフレームへのアクセス

R > my_data[3, 2]  # インデックス
[1] 103

R > my_data$name   # $name
[1] "kumazou1" "kumazou2" "kumazou3"

R > my_data[["age"]]  # リスト風アクセス
[1] 101 102 103

R > my_data$name[1]   # 名前とインデックス
[1] "kumazou1"

ファクター

ファクターは、データのカテゴリを記述するためのラベルです。factor関数で生成します。

R > my_factor <- factor(c("PTN-A", "PTN-B", "PTN-C"))
R > my_factor
[1] PTN-A PTN-B PTN-C
Levels: PTN-A PTN-B PTN-C
スポンサーリンク