R言語で、リストまたはベクトルの各要素とそのインデックスに関数を適用し入力と同じ型を返す方法について解説します。ここではtidyverseパッケージに含まれているpurrrパッケージのimodify()を使用した方法についてお伝えします。
imodify()の概要
imodify()は、2つのリストまたはベクトルの各要素に関数を適用し入力と同じ型を返すための関数です。imodify() は、imap()と同様に、名前またはインデックスを.fに渡します。
imodify()の使い方
imodify(.x, .f, ...)
modify()の引数
.x
リストまたはデータフレームを指定します。
.f
対応するマップ関数と同じ方法で指定される関数を指定します。
…
マッピングされた関数に渡される追加の引数を指定します。
現在、.fに追加の(定数)引数を渡すために…を使用することは、一般的に推奨されていません。代わりに、省略形の匿名関数を使用してください。
# 次の代わりに
x |> map(f, 1, 2, collapse = ",")
# 次のように実行してください。
x |> map(\(x) f(x, 1, 2, collapse = ","))
これにより、どの引数がどの関数に属しているかがわかりやすくなり、エラーメッセージもわかりやすくなります。
imodify()の戻り値
.xと同じクラスのオブジェクトを返します。
使用例
準備
あらかじめ、tidyverseパッケージを読み込んでおきます。
library(tidyverse)
文字列ベクトルにimodify()を適用する例
文字列ベクトルにimodify()を適用すると次のようになります。
x <- c("1", "2", "3")
names(x) <- c("first", "second", "third")
imodify(x, \(x, idx) paste(idx, x, sep = ":"))
first second third
"first:1" "second:2" "third:3"