R×purrr::keep_at リストまたはベクトルに対して要素の名前または位置に基づいて要素を保持する

R言語で、リストまたはベクトルに対して要素の名前または位置に基づいて要素を保持する方法について解説します。ここではtidyverseパッケージに含まれているpurrrパッケージのkeep_at()を使用した方法についてお伝えします。

keep_at()の概要

keep_at()は、リストまたはベクトルに対して要素の名前または位置に基づいて要素を保持するための関数です。

keep_at(()の使い方


keep_at(x, at)

keep_at(()の引数

x

リストまたはベクトルを指定します。

at

選択する要素を表す論理値、整数値、または文字ベクトル。あるいは、名前のベクトルを受け取り、選択する要素の論理値、整数値、または文字ベクトルを返す関数。
[非推奨]: tidyselectパッケージがインストールされている場合、vars()とtidyselectヘルパーを使用して要素を選択できます。

keep_at()の戻り値

リストまたはベクトルを返します。

準備

あらかじめ、tidyverseパッケージを読み込んでおきます。


library(tidyverse)

使用例

リストから特定文字と一致する要素を抽出する

次は、要素xに1から10までの数値、要素yに1から5までの数値、要素zに5から10までの数値が格納されているリストxに対して、要素がxまたはzのときの要素を抽出するコードです。


x <- list(
    x = 1:10,
    y = 1:5,
    z = 5:10
  )
keep_at(x, ~ .x %in% c("x", "z"))

$x
 [1]  1  2  3  4  5  6  7  8  9 10

$z
[1]  5  6  7  8  9 10

ベクトルの要素名が特定の文字と一致する要素を抽出する

次は、1から10までの数値ベクトルに対して、各要素にa~jまでのアルファベットを割り当て、各要素がaまたはcまたはeである数値を抽出するコードです。


x <- 1:10
names(x) <- letters[1:10]
keep_at(x, ~ .x %in% c("a", "c", "e"))

a c e 
1 3 5