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
スポンサーリンク





ピックアップ記事

  1. awk for 繰り返し処理 簡単なサンプルでわかる インクリメント・デクリメント、変わった繰り返し

    awkのfor文は、カウンタを目印にして処理を繰り返したいときによく使われます。for文では、カウ…
  2. R 使い方 グラフの色 自作のカラーパレットとデフォルトのカラーパレット

    グラフを描画する際、色の組み合わせを1つ1つ考えるのは面倒ですよね。Rには、あらかじめ色の組み合わ…
  3. R subset関数 データフレームやmatrixからの条件指定による行・列の抽出

    R の subset関数は、データフレームやマトリックスから条件にマッチした部分集合を取り出します…

人気記事

  1. IGV, 解析ツール

    IGV 使い方 インストール〜便利な使い方まで | リファレンス・マッピングデータ・アノテーションを読み込んで表示しよう
    IGV(Integrative Genomics View…
  2. R データ型 - 文字列・ベクター・データフレーム・マトリックス など-, R言語, スクリプト

    R subset関数 データフレームやmatrixからの条件指定による行・列の抽出
    R の subset関数は、データフレームやマトリックスか…
  3. Excel, その他, 統計

    z-score 計算方法 エクセル(Excel) 編
    統計処理で、大きく変化しているなどの判断基準にも使われる値…

おすすめ記事

  1. R言語, グラフ

    R 使い方 軸・ラベルの調整(向き・サイズ・色など) グラフの描き方
    Rによるplot(グラフ)の描画は、手軽で大変便利です。た…
  2. bash 応用, シェルスクリプト

    シェル スクリプト ファイル存在チェック・空のファイルチェック
    bashでスクリプトを作成するときに、よく使うのがファイル…
  3. awk, bash 文字列操作, シェルスクリプト

    bash 部分文字列・置換・長さ・連結・分割の文字列処理
    bashのよく使う文字列処理、部分文字列・置換・連結・長さ…