「大人の教養・知識・気付き」を伸ばすブログ

一流の大人(ビジネスマン、政治家、リーダー…)として知っておきたい、教養・社会動向を意外なところから取り上げ学ぶことで“気付く力”を伸ばすブログです。目下、データ分析・語学に力点を置いています。今月(2022年10月)からは多忙につき、日々の投稿数を減らします。

MENU

プログラムとしてのRを学ぶ(その04/16)

 \mathrm{R}をプログラムとして見たときに注意・検討すべきところを学んでおきたい、ということで

を読んでいく。

4. リスト

 \mathrm{R}\mathrm{list}構造はさまざまな種類のオブジェクトを結合できる。
 

4.1 リストの作成

 厳密にはリストはベクトルである。通常のベクトルは成分を小さな成分に分割できないため、アトミックベクトルという。それに対してリストは再帰ベクトルと呼ぶ。
 リストは以下のように作成できる。リスト成分はインデックスでも名前でも指定可能である*1

# list()による作成
j <- list(name = "Joe", salary = 500, union = T)
j

# vectorでも作成可能
z <- vector(mode = "list")
z[["abc"]] <- 3
z

ここでの\mathrm{salary}などの成分名*2は省略可能である。

4.2 一般的なリスト操作

4.2.1 リストのインデックス付け

 リストの各成分へのアクセス方法はさまざまである。たとえばリスト\mathrm{j}の2番目の成分\mathrm{salary}へのアクセス方法には以下がある:

j$salary
j[["salary"]]
j[[2]]

リストをベクトルのように扱って参照する場合、二重角かっこを用いる点に注意する。もし一重の角かっことすると、その保有値をリストとして返す。

4.2.2 リスト要素の追加と削除

 リストへの要素追加は、リスト・オブジェクトが既にあるという前提で行うことができる。

z <- list(a = "abc", b = 12)
z$c <- "sailing" # cというタグ名の"sailing"を成分として追加
z

要素を削除するにはその要素に\mathrm{NULL}を追加する(書き換える)。

z$c <- NULL
z
4.2.3 リストサイズの取得

 リストはベクトルであるため、\mathrm{length}()関数でリストの成分数を取得できる。

z <- list(a = "abc", b = 12)
length(z)

4.3 リストの成分と値へのアクセス

 リストの成分にタグが付けられている場合、\mathrm{names}()関数を用いてタグを取得できる。値を取得するには\mathrm{unlist}()関数を用いる*3

j <- list("name" = "Joe", "salary" = 55000, "union" = F)

# タグ名の取得
names(j)

# 値の取得
unlist(j)

4.4 リストへの関数の適用

 リストの各成分に関数を適用するには、\mathrm{lapply}()関数と\mathrm{sapply}()関数が利用できる。これらは戻り値がリストかまたはベクトル(行列)かという相違がある。

4.5 再帰的リスト

 リストは再帰的で、リストの中にリストを持つことができる。

b <- list(u = 5, v = 12)
c <- list(w = 13)
a <- list(b,c)

length(a) # 2

*1:わかりやすさの観点からは後者の方が望ましい場合がある。

*2:\mathrm{R}ではタグという。

*3:このとき戻り値はベクトルで、たいてい文字列になる。

プライバシーポリシー お問い合わせ