Advanced R に Lookup Table に関する記載があり、知らなかったので備忘のためにまとめました。
Lookup Table
まずは Lookup Table でなにをしているのか Advanced R のコードを見てみます。
x <- c("m", "f", "u", "f", "f", "m", "m")
lookup <- c(m = "Male", f = "Female", u = NA)
lookup[x]
#> m f u f f m m
#> "Male" "Female" NA "Female" "Female" "Male" "Male"
名前付きベクトルを使って略称を変換しています。
最初にこのコードを見た時なぜこんな挙動になるのかイマイチわかりませんでしたが、文字列ベクトルを使ったデータ抽出の挙動を振り返ると合点がいきました。
なぜ変換されるのか
名前付きベクトルに対して、文字列ベクトルを使ってデータ抽出を行うときの挙動があります。
以下2つの性質を利用することで Lookup Table が実現されています。
名前が一致する要素を返す
lookup[c("m", "f")]
#> m f
#> "Male" "Female"
同じ添字を繰り返すことができる
整数添字と同じように繰り返すことができます。
lookup[c("m", "m", "m")]
#> m m m
#> "Male" "Male" "Male"
おまけ: 定義されていない名前でのアクセス
存在しない名前でのアクセスは、範囲外として NA
が返ってきます。
lookup[c("m", "x")]
#> m <NA>
#> "Male" NA