R×purrr::modify リストまたはベクトルの各要素に関数を適用し入力と同じ型を返す

R言語で、リストまたはベクトルの各要素に関数を適用し入力と同じ型を返す方法について解説します。ここではtidyverseパッケージに含まれているpurrrパッケージのmodify()を使用した方法についてお伝えします。

modify()の概要

modify()は、リストまたはベクトルの各要素に関数を適用し入力と同じ型を返すための関数です。modify() は「x[[i]] <- f(x[[i]]); return(x)」のショートカットです。

modify()の使い方


modify(.x, .f, ...)

modify()の引数

.x

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

.f

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

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


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

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

modify()の戻り値

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

使用例

準備

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


library(tidyverse)

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

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


x <- c(1, 2, 3)
modify(x, \(x) x^2)

[1] 1 4 9