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

南国のビーチパラソルの下で、Rプログラムを打ってる日常を求めて、、Daily Life of Bioinformatician in Kyobashi of Osaka

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

はじめに

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

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

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

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

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

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

あと、空のベクトル( c() )からのスタートでもできます。

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

#繰り返し回数
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()
#あるいは B <- c() でもいけます

#繰り返し回数
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引数以外の任意の引数にすることもできます。

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

まとめ

今回は、空リストと空ベクトルを扱う基本形を示しました。

これを応用するだけでも、いろいろと活用シーンがあるはずかもよ。