map_at()の概要
map_at()は、ベクトルの要素に対して指定した番号または名前に該当したときに関数を適用しリストを返すための関数です。map_at()は、.xのどの要素を.fで変換するかを指定する名前または位置のベクトル.atを受け取ります。
map_at()の使い方
map_at(.x, .at, .f, ..., .progress = FALSE)
map_at()の引数
リストまたはデータフレームを指定します。
選択する要素を指定する論理ベクトル、整数ベクトル、または文字ベクトルを指定します。
あるいは、名前のベクトルを受け取り、選択する要素の論理値、整数値、または文字ベクトルを返す関数を指定します。
[非推奨]: tidyselect パッケージがインストールされている場合は、vars()とtidyselectヘルパーを使用して要素を選択できます。
関数を指定します。
以下のいずれかの方法で指定されます。
- 名前付き関数(例:mean)。
- 匿名関数(例:\(x) x + 1 または function(x) x + 1)。
- 数式(例:~ .x + 1)。最初の引数を参照するには.xを使用する必要があります。現在は推奨されていません。
- 文字列、整数、またはリスト(例:”idx”, 1、list(“idx”, 1))。これらはそれぞれ \(x) pluck(x, “idx”)、\(x) pluck(x, 1)、\(x) pluck(x, “idx”, 1) の省略形です。インデックス付き要素がNULLまたは存在しない場合にデフォルト値を設定するには、オプションで.defaultを指定します。
【実験的】
関数をin_parallel()で囲むことで、その関数を並列実行するように指定できます。詳しくはin_parallel()を参照してください。このコンテキストでは「…」の使用は許可されていません。
マッピングされた関数に渡される追加の引数を指定します。
現在、.fに追加の(定数)引数を渡すために…を使用することは、一般的に推奨されていません。代わりに、省略形の匿名関数を使用してください。
# 次の代わりに
x |> map(f, 1, 2, collapse = ",")
# 次のように実行してください。
x |> map(\(x) f(x, 1, 2, collapse = ","))
これにより、どの引数がどの関数に属しているかがわかりやすくなり、エラーメッセージもわかりやすくなります。
進行状況バーを表示するかどうかを指定します。
TRUEを指定すると基本的な進行状況バーが表示されます。文字列を指定して名前を付けることもできます。詳細については、progress_barsを参照してください。
map_at()の戻り値
入力と同じ長さのリストを返します。
使用例
準備
あらかじめ、tidyverseパッケージを読み込んでおきます。
library(tidyverse)
リストの要素名と値を同時に変更する
次は、ベクトルの要素の1番目と3番目の数値を10倍してリストで返すコードです。
c(1, 12, 123) |>
map_at(
c(1, 3),
\(x) x * 10)
[[1]]
[1] 10
[[2]]
[1] 12
[[3]]
[1] 1230