京橋のバイオインフォマティシャンの日常

まずは、データ分析、コマンドラインのメモとして

【Rのジミ〜な小技シリーズ】空リストの作成とリスト操作、それと空ベクトルを使ったベクトル結合とデータフレーム結合のトピックスを扱う

またもや、ジミーなトピックであるが、空リストlist()と空ベクトルc()について取り上げてみる。

こういうジミーな技術の積み重ねがスキル向上に繋がるんだと思うんけどね。

今回の内容

空リストlist()からリストを作成する

ここでは、空リストからスタートして、リスト成分を増やしていくリスト操作を扱う。

リスト内の成分は、[[]]で指定する。

また、seq_lenは、ある長さを与えて数列(1,2,3...)を生成する関数である。

#空リストの作成
A <- list()
#あるいは A <- NULL でもいけるかも

#繰り返し回数
len <- 5

#数列の生成
seq_len(5)
#[1] 1 2 3 4 5

#第5成分まで要素NAのリストを作成する。
for(n in seq_len(len)){
A[[n]] <- NA
}

A
#[[1]]
#[1] NA
#[[2]]
#[1] NA
#[[3]]
#[1] NA
#[[4]]
#[1] NA
#[[5]]
#[1] NA

少し応用編で、成分ごとに名前をつけて、要素を変数代入する場合を考えてみる。

names(B)[n] で、リストの成分名を指定できる。

#空リストの作成
B <- list()

#繰り返し回数
len <- 5

##名前をつけたリストの作成
for(n in seq_len(len)){
B[[n]] <- n
names(B)[n] <- paste("X", n, sep="")
}

B
#$X1
#[1] 1
#$X2
#[1] 2
#$X3
#[1] 3
#$X4
#[1] 4
#$X5
#[1] 5

空ベクトルc()からベクトルを作成する

次に、空ベクトルc()からスタートして、ベクトル同士の結合を扱ってみる。

ベクトルの結合は、同じく、c()で記述できる。

#空ベクトルの作成
C <- c()

#繰り返し回数
len <- 5

#ベクトルの結合
for(n in seq_len(len)){
D <- c(n)
C <- c(C, D)
}

C
#[1] 1 2 3 4 5

空ベクトルc()からデータフレームを作成する

空ベクトルを使って、データフレームの行結合を行う場合を考えてみる。

また、このやり方では、列結合はできなかった。

#空ベクトルの作成
G <- c()

#繰り返し回数
len <- 5

#magrittrのインストール
install.packages("magrittr"); library(magrittr)

#データフレームの行結合
for(n in seq_len(len)){
H <- data.frame(V1=n, V2=len)
G <- G %>% rbind(H)
}

G 
#  V1 V2
#1  1  5
#2  2  5
#3  3  5
#4  4  5
#5  5  5

%>% (パイプ演算子あるいは単にパイプ)について

基本的には、%>% (パイプ演算子)の左辺の出力を、右辺の第1引数に代入するという意味になる。

また、右辺で.を使うことで、第1引数以外の任意の引数にすることもできる。

あとは、 %>%を複数個つなげることもできる。

まとめ

今回は、空リストと空ベクトルを扱う基本形なのだが、これを応用するだけでも、いろいろと活用シーンはある。