はじめに
またもや、ジミーなトピックですけど、空リスト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引数以外の任意の引数にすることもできます。
あとは、 %>%
を複数個つなげることもできます。
まとめ
今回は、空リストと空ベクトルを扱う基本形を示しました。
これを応用するだけでも、いろいろと活用シーンがあるはずかもよ。