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

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

modify2()の概要

modify2()は、2つのリストまたはベクトルの各要素に関数を適用し入力と同じ型を返すための関数です。modify2()は、map2()と同様に、.xの要素を変更するだけでなく、.yの要素を.fに渡します。

modify2()の使い方


modify2(.x, .y, .f, ...)

modify2()の引数

.x

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

.y

リストまたはデータフレームを指定します。通常は.xと同じ長さです。

.f

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

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


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

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

modify2()の戻り値

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

使用例

準備

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


library(tidyverse)

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

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


x <- c(2, 5, 10)
y <- c(1, 2, 3)
modify2(x, y, \(x, y) x ^ y)

[1]    2   25 1000