始める無料で始める

pmap() で3つ以上の入力を使ってデータをシミュレーションする

3つのリストを反復処理したい場合はどうすればよいでしょうか? map3() はあるのでしょうか? 2つを超えるリスト(3つ、4つ、あるいは20でも)を反復処理するには、pmap() を使います。ただし、pmap() ではリストの引数の渡し方が少し異なります。

pmap() を使うには、まず反復処理したいすべてのリストを含む「マスターリスト」を作成します。マスターリストが pmap() の入力になります。.x.y の代わりに、リスト名をそのまま引数名として使います。

ここでは、2つではなく5つのリストを入力として使い、もう一度データをシミュレーションします。pmap() を使うとシミュレートするデータセットを完全にコントロールでき、異なるサイトに加えて、2つの異なる平均と2つの異なる標準偏差を利用できます。

この演習はコースの一部です

purrr で学ぶ関数型プログラミング入門

コースを見る

演習の手順

  • sitesmeansmeans2sigmasigma2 の各リストを含む名前付きリストを作成します。
  • そのリストのリストに対して pmap() を実行し、3列のデータフレームのリストを作成します。最初の列は sites です。
    • 2列目は a で、mean = meanssd = sigma を指定した rnorm() の結果です。
    • 3列目は b で、mean = means2sd = sigma2 を指定した rnorm() の結果です。

実践的なインタラクティブ演習

このサンプルコードを完成させて、この演習に挑戦してみましょう。

# Create a master list, a list of lists
pmapinputs <- list(sites = ___,  means = ___, sigma = ___, 
                   means2 = ___, sigma2 = ___)

# Map over the master list
list_of_files_pmap <- pmap(___, 
  function(___, ___, ___, ___, ___) 
    data.frame(sites = ___,
        a = rnorm(mean = ___, n = 200, sd = ___),
        b = rnorm(mean = ___, n = 200, sd = ___)))
                           
list_of_files_pmap
コードを編集して実行