Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

purrr::map equivalent to dplyr::do

Tags:

r

dplyr

purrr

Reading https://twitter.com/hadleywickham/status/719542847045636096 I understand that the purrr approach should basically replace do.

Hence, I was wondering how I would use purrr to do this:

library(dplyr)
d <- data_frame(n = 1:3)
d %>% rowwise() %>% do(data_frame(x = seq_len(.$n))) %>% ungroup()
# # tibble [6 x 1]
#       x
# * <int>
# 1     1
# 2     1
# 3     2
# 4     1
# 5     2
# 6     3

The closest I could get was something like:

library(purrrr)
d %>% mutate(x = map(n, seq_len))
# # A tibble: 3 x 2
#       n         x
#   <int>    <list>
# 1     1 <int [1]>
# 2     2 <int [2]>
# 3     3 <int [3]>

map_int would not work. So what is the purrrr way of doing it?

like image 430
thothal Avatar asked Mar 08 '23 21:03

thothal


1 Answers

You could do the following:

library(tidyverse)
library(purrr)
d %>% by_row(~data_frame(x = seq_len(.$n))) %>% unnest()

by_row applies a function to each row, storing the result in nested tibbles. unnest is then used to remove the nesting and to concatenate the tibbles.

like image 187
AEF Avatar answered Mar 23 '23 09:03

AEF