R×purrr::modify_at ベクトルの要素に対して指定した番号または名前に該当したときに関数を適用し入力と同じ型を返す

R言語で、ベクトルの要素に対して指定した番号または名前に該当したときに関数を適用し入力と同じ型を返す方法について解説します。ここではtidyverseパッケージに含まれているpurrrパッケージのmodify_at()を使用した方法についてお伝えします。

modify_at()の概要

modify_if()は、ベクトルの要素に対して指定した番号または名前に該当したときに関数を適用し入力と同じ型を返すための関数です。modify_at()は、名前または位置で指定された要素のみを変更します。

modify_at()の使い方


modify_at(.x, .at, .f, ...)

modify_at()の引数

.x

リストまたはデータフレームを指定します。

.at

選択する要素を示す論理ベクトル、整数ベクトル、または文字ベクトルを指定します。
あるいは、名前のベクトルを受け取り、選択する要素の論理ベクトル、整数ベクトル、または文字ベクトルを返す関数を指定します。

.f

対応するマップ関数と同じ方法で指定される関数を指定します。

マッピングされた関数に渡される追加の引数を指定します。
現在、.fに追加の(定数)引数を渡すために…を使用することは、一般的に推奨されていません。代わりに、省略形の匿名関数を使用してください。


# 次の代わりに
x |> map(f, 1, 2, collapse = ",")
# 次のように実行してください。
x |> map(\(x) f(x, 1, 2, collapse = ","))

これにより、どの引数がどの関数に属しているかがわかりやすくなり、エラーメッセージもわかりやすくなります。

modify_at()の戻り値

.xと同じクラスのオブジェクトを返します。

使用例

準備

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


library(tidyverse)

数値ベクトルにmodify_at()を適用する例

数値ベクトルにmodify_at()を適用すると次のようになります。


c(1, 12, 123) |>
  modify_at(
    c(1, 3),
    \(x) x * 10)

[1]   10   12 1230