R×purrr::walk リストまたはベクトルの各要素に関数を適用する

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

walk()の概要

walk()は、リストまたはベクトルの各要素に関数を適用するための関数です。

walk()の使い方


walk(.x, .f, ..., .progress = FALSE)

walk()の引数

.x

リストまたはベクトルを指定します。

.f

関数を指定します。
以下のいずれかの方法で指定します。

  • 名前付き関数(例: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 = ","))

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

.progress = FALSE

プログレスバーを表示するかどうかを指定します。
TRUEを指定すると基本的なプログレスバーが表示されます。文字列で名前を付けることもできます。詳細についてはprogress_barsを参照してください。

walk()の戻り値

walk()は入力.xを(非表示で)返します。これにより、パイプでの使用が容易になります。.f()の戻り値は無視されます。

準備

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


library(tidyverse)

使用例

文字列ベクトルの各要素をテキスト保存するには次のようにします。


x <- c("でんでんむしむし", "かたつむり", "おまえのあたまは", "どこにある")
walk(x, \(x) write_lines(x, "data.txt", append = TRUE))