pmapの特殊な仕様について

  • purrr::map2 でベースを作ったあと、引数をさらに増やしたいときがある
  • map2 で扱える引数は2つまでなので、引数を増やすには purrr::pmap を使う
  • pmap は 引数の指定はやや特殊
  • map2 のように .x .y …ではなく、pmap では ..1 ..2 ..3 …としなくてはならない

map2 でベースを作成

iris %>% 
  group_nest(Species) %>% 
  mutate(
    A = c(100, 200, 300),
    B = c(100, 200, 300)
  ) %>% 
  mutate(
    C = map2(
      .x = data,
      .y = A,
      .f = ~ {.x + .y}
    )
  ) %>% 
  unnest(C) 

動く!

pmap に変更

iris %>% 
  group_nest(Species) %>% 
  mutate(
    A = c(100, 200, 300),
    B = c(100, 200, 300)
  ) %>% 
  mutate(
    C = pmap(
      .l = list(data, A),
      .f = ~ {.x + .y}
    )
  ) %>% 
  unnest(C) 

まだ動く!

pmap で引数を1つ追加

iris %>% 
  group_nest(Species) %>% 
  mutate(
    A = c(100, 200, 300),
    B = c(100, 200, 300)
  ) %>% 
  mutate(
    C = pmap(
      .l = list(data, A, B),
      .f = ~ {.x + .y + .z}
    )
  ) %>% 
  unnest(C) 

動かない!!

pmap の引数の指定方法を変更

iris %>% 
  group_nest(Species) %>% 
  mutate(
    A = c(100, 200, 300),
    B = c(100, 200, 300)
  ) %>% 
  mutate(
    C = pmap(
      .l = list(data, A, B),
      .f = ~ {..1 + ..2 + ..3}
    )
  ) %>% 
  unnest(C) 

動いた!!!