Setup

library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(purrr)

Example 2 from Tuesday

primes = c( 2,  3,  5,  7, 11, 13, 17, 19, 23, 29, 31, 37,
           43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97)

x = c(3, 4, 12, 19, 23, 48, 50, 61, 63, 78)
f1 = function() {
  
  res = c()
  for (v in x) {
    if (!v %in% primes)
      res = c(res, v)
  }
  res
  
}

f1()
## [1]  4 12 48 50 63 78
f2 = function() {
  x[ !x %in% primes]
}

f2()
## [1]  4 12 48 50 63 78
f3 = function() {
  x[ sapply(x, function(v) !v %in% primes) ]
}

f4 = function() {
  lapply(x, function(v) if (!v %in% primes) v else NULL) %>% unlist()
}

f5 = function() {
  map(x, function(v) if (!v %in% primes) v else NULL) %>% unlist()
}

f6 = function() {
  keep(x, function(v) !v %in% primes)
}

f7 = function() {
  discard(x, function(v) v %in% primes)
}

Benchmarking

library(microbenchmark)

microbenchmark(f1(), f2(), f3(), f4(), f5(), f6(), f7())
## Unit: microseconds
##  expr    min       lq      mean   median       uq      max neval
##  f1()  9.535  13.0010  17.39329  17.5610  20.5830   36.869   100
##  f2()  2.050   3.5680  33.50033   4.4535   6.6765 2819.226   100
##  f3() 24.057  33.7385  83.99159  44.4495  51.5575 3838.678   100
##  f4() 70.219  86.2015 186.97515 124.6260 137.3610 4278.889   100
##  f5() 86.814 101.2720 208.96799 130.5055 174.8155 5032.339   100
##  f6() 33.787  41.2475  80.14652  63.2565  71.7860 2164.032   100
##  f7() 33.459  42.8115  87.69014  64.9880  71.1325 1960.078   100
x = sample(1:100, 1e3, replace = TRUE)
microbenchmark(f1(), f2(), f3(), f4(), f5(), f6(), f7())
## Unit: microseconds
##  expr      min       lq       mean    median        uq       max neval
##  f1() 1544.248 1905.675 2900.81644 2267.3585 3102.9235  9838.561   100
##  f2()   36.295   43.282   55.72544   49.4005   66.8895   126.969   100
##  f3() 1208.103 1511.863 2035.90960 1683.6135 2159.0630 15475.057   100
##  f4() 1301.072 1645.440 2376.38136 1934.1065 2470.7430  7739.636   100
##  f5() 1357.113 1715.380 2772.84868 1972.3380 2599.1705 45802.550   100
##  f6() 1286.683 1585.564 2165.32024 1804.7540 2490.8830  6713.431   100
##  f7() 1264.282 1561.089 2123.33943 1771.6785 2365.6060  7600.564   100

More repurrrsive

library(repurrrsive)

sw_people

map_dfr(sw_people, ~.x)
## Error in bind_rows_(x, .id): Argument 10 must be length 1, not 5
map_dfr(sw_people, ~ as_data_frame(.x))
## Error: Columns `vehicles`, `starships` must be length 1 or 5, not 2, 2
do.call(rbind, sw_people)
## Warning in (function (..., deparse.level = 1) : number of columns of result
## is not a multiple of vector length (arg 2)
##       name                    height    mass      hair_color     
##  [1,] "Luke Skywalker"        "172"     "77"      "blond"        
##  [2,] "C-3PO"                 "167"     "75"      "n/a"          
##  [3,] "R2-D2"                 "96"      "32"      "n/a"          
##  [4,] "Darth Vader"           "202"     "136"     "none"         
##  [5,] "Leia Organa"           "150"     "49"      "brown"        
##  [6,] "Owen Lars"             "178"     "120"     "brown, grey"  
##  [7,] "Beru Whitesun lars"    "165"     "75"      "brown"        
##  [8,] "R5-D4"                 "97"      "32"      "n/a"          
##  [9,] "Biggs Darklighter"     "183"     "84"      "black"        
## [10,] "Obi-Wan Kenobi"        "182"     "77"      "auburn, white"
## [11,] "Anakin Skywalker"      "188"     "84"      "blond"        
## [12,] "Wilhuff Tarkin"        "180"     "unknown" "auburn, grey" 
## [13,] "Chewbacca"             "228"     "112"     "brown"        
## [14,] "Han Solo"              "180"     "80"      "brown"        
## [15,] "Greedo"                "173"     "74"      "n/a"          
## [16,] "Jabba Desilijic Tiure" "175"     "1,358"   "n/a"          
## [17,] "Wedge Antilles"        "170"     "77"      "brown"        
## [18,] "Jek Tono Porkins"      "180"     "110"     "brown"        
## [19,] "Yoda"                  "66"      "17"      "white"        
## [20,] "Palpatine"             "170"     "75"      "grey"         
## [21,] "Boba Fett"             "183"     "78.2"    "black"        
## [22,] "IG-88"                 "200"     "140"     "none"         
## [23,] "Bossk"                 "190"     "113"     "none"         
## [24,] "Lando Calrissian"      "177"     "79"      "black"        
## [25,] "Lobot"                 "175"     "79"      "none"         
## [26,] "Ackbar"                "180"     "83"      "none"         
## [27,] "Mon Mothma"            "150"     "unknown" "auburn"       
## [28,] "Arvel Crynyd"          "unknown" "unknown" "brown"        
## [29,] "Wicket Systri Warrick" "88"      "20"      "brown"        
## [30,] "Nien Nunb"             "160"     "68"      "none"         
## [31,] "Qui-Gon Jinn"          "193"     "89"      "brown"        
## [32,] "Nute Gunray"           "191"     "90"      "none"         
## [33,] "Finis Valorum"         "170"     "unknown" "blond"        
## [34,] "Jar Jar Binks"         "196"     "66"      "none"         
## [35,] "Roos Tarpals"          "224"     "82"      "none"         
## [36,] "Rugor Nass"            "206"     "unknown" "none"         
## [37,] "Ric Olié"              "183"     "unknown" "brown"        
## [38,] "Watto"                 "137"     "unknown" "black"        
## [39,] "Sebulba"               "112"     "40"      "none"         
## [40,] "Quarsh Panaka"         "183"     "unknown" "black"        
## [41,] "Shmi Skywalker"        "163"     "unknown" "black"        
## [42,] "Darth Maul"            "175"     "80"      "none"         
## [43,] "Bib Fortuna"           "180"     "unknown" "none"         
## [44,] "Ayla Secura"           "178"     "55"      "none"         
## [45,] "Dud Bolt"              "94"      "45"      "none"         
## [46,] "Gasgano"               "122"     "unknown" "none"         
## [47,] "Ben Quadinaros"        "163"     "65"      "none"         
## [48,] "Mace Windu"            "188"     "84"      "none"         
## [49,] "Ki-Adi-Mundi"          "198"     "82"      "white"        
## [50,] "Kit Fisto"             "196"     "87"      "none"         
## [51,] "Eeth Koth"             "171"     "unknown" "black"        
## [52,] "Adi Gallia"            "184"     "50"      "none"         
## [53,] "Saesee Tiin"           "188"     "unknown" "none"         
## [54,] "Yarael Poof"           "264"     "unknown" "none"         
## [55,] "Plo Koon"              "188"     "80"      "none"         
## [56,] "Mas Amedda"            "196"     "unknown" "none"         
## [57,] "Gregar Typho"          "185"     "85"      "black"        
## [58,] "Cordé"                 "157"     "unknown" "brown"        
## [59,] "Cliegg Lars"           "183"     "unknown" "brown"        
## [60,] "Poggle the Lesser"     "183"     "80"      "none"         
## [61,] "Luminara Unduli"       "170"     "56.2"    "black"        
## [62,] "Barriss Offee"         "166"     "50"      "black"        
## [63,] "Dormé"                 "165"     "unknown" "brown"        
## [64,] "Dooku"                 "193"     "80"      "white"        
## [65,] "Bail Prestor Organa"   "191"     "unknown" "black"        
## [66,] "Jango Fett"            "183"     "79"      "black"        
## [67,] "Zam Wesell"            "168"     "55"      "blonde"       
## [68,] "Dexter Jettster"       "198"     "102"     "none"         
## [69,] "Lama Su"               "229"     "88"      "none"         
## [70,] "Taun We"               "213"     "unknown" "none"         
## [71,] "Jocasta Nu"            "167"     "unknown" "white"        
## [72,] "Ratts Tyerell"         "79"      "15"      "none"         
## [73,] "R4-P17"                "96"      "unknown" "none"         
## [74,] "Wat Tambor"            "193"     "48"      "none"         
## [75,] "San Hill"              "191"     "unknown" "none"         
## [76,] "Shaak Ti"              "178"     "57"      "none"         
## [77,] "Grievous"              "216"     "159"     "none"         
## [78,] "Tarfful"               "234"     "136"     "brown"        
## [79,] "Raymus Antilles"       "188"     "79"      "brown"        
## [80,] "Sly Moore"             "178"     "48"      "none"         
## [81,] "Tion Medon"            "206"     "80"      "none"         
## [82,] "Finn"                  "unknown" "unknown" "black"        
## [83,] "Rey"                   "unknown" "unknown" "brown"        
## [84,] "Poe Dameron"           "unknown" "unknown" "brown"        
## [85,] "BB8"                   "unknown" "unknown" "none"         
## [86,] "Captain Phasma"        "unknown" "unknown" "unknown"      
## [87,] "Padmé Amidala"         "165"     "45"      "brown"        
##       skin_color            eye_color       birth_year gender         
##  [1,] "fair"                "blue"          "19BBY"    "male"         
##  [2,] "gold"                "yellow"        "112BBY"   "n/a"          
##  [3,] "white, blue"         "red"           "33BBY"    "n/a"          
##  [4,] "white"               "yellow"        "41.9BBY"  "male"         
##  [5,] "light"               "brown"         "19BBY"    "female"       
##  [6,] "light"               "blue"          "52BBY"    "male"         
##  [7,] "light"               "blue"          "47BBY"    "female"       
##  [8,] "white, red"          "red"           "unknown"  "n/a"          
##  [9,] "light"               "brown"         "24BBY"    "male"         
## [10,] "fair"                "blue-gray"     "57BBY"    "male"         
## [11,] "fair"                "blue"          "41.9BBY"  "male"         
## [12,] "fair"                "blue"          "64BBY"    "male"         
## [13,] "unknown"             "blue"          "200BBY"   "male"         
## [14,] "fair"                "brown"         "29BBY"    "male"         
## [15,] "green"               "black"         "44BBY"    "male"         
## [16,] "green-tan, brown"    "orange"        "600BBY"   "hermaphrodite"
## [17,] "fair"                "hazel"         "21BBY"    "male"         
## [18,] "fair"                "blue"          "unknown"  "male"         
## [19,] "green"               "brown"         "896BBY"   "male"         
## [20,] "pale"                "yellow"        "82BBY"    "male"         
## [21,] "fair"                "brown"         "31.5BBY"  "male"         
## [22,] "metal"               "red"           "15BBY"    "none"         
## [23,] "green"               "red"           "53BBY"    "male"         
## [24,] "dark"                "brown"         "31BBY"    "male"         
## [25,] "light"               "blue"          "37BBY"    "male"         
## [26,] "brown mottle"        "orange"        "41BBY"    "male"         
## [27,] "fair"                "blue"          "48BBY"    "female"       
## [28,] "fair"                "brown"         "unknown"  "male"         
## [29,] "brown"               "brown"         "8BBY"     "male"         
## [30,] "grey"                "black"         "unknown"  "male"         
## [31,] "fair"                "blue"          "92BBY"    "male"         
## [32,] "mottled green"       "red"           "unknown"  "male"         
## [33,] "fair"                "blue"          "91BBY"    "male"         
## [34,] "orange"              "orange"        "52BBY"    "male"         
## [35,] "grey"                "orange"        "unknown"  "male"         
## [36,] "green"               "orange"        "unknown"  "male"         
## [37,] "fair"                "blue"          "unknown"  "male"         
## [38,] "blue, grey"          "yellow"        "unknown"  "male"         
## [39,] "grey, red"           "orange"        "unknown"  "male"         
## [40,] "dark"                "brown"         "62BBY"    "male"         
## [41,] "fair"                "brown"         "72BBY"    "female"       
## [42,] "red"                 "yellow"        "54BBY"    "male"         
## [43,] "pale"                "pink"          "unknown"  "male"         
## [44,] "blue"                "hazel"         "48BBY"    "female"       
## [45,] "blue, grey"          "yellow"        "unknown"  "male"         
## [46,] "white, blue"         "black"         "unknown"  "male"         
## [47,] "grey, green, yellow" "orange"        "unknown"  "male"         
## [48,] "dark"                "brown"         "72BBY"    "male"         
## [49,] "pale"                "yellow"        "92BBY"    "male"         
## [50,] "green"               "black"         "unknown"  "male"         
## [51,] "brown"               "brown"         "unknown"  "male"         
## [52,] "dark"                "blue"          "unknown"  "female"       
## [53,] "pale"                "orange"        "unknown"  "male"         
## [54,] "white"               "yellow"        "unknown"  "male"         
## [55,] "orange"              "black"         "22BBY"    "male"         
## [56,] "blue"                "blue"          "unknown"  "male"         
## [57,] "dark"                "brown"         "unknown"  "male"         
## [58,] "light"               "brown"         "unknown"  "female"       
## [59,] "fair"                "blue"          "82BBY"    "male"         
## [60,] "green"               "yellow"        "unknown"  "male"         
## [61,] "yellow"              "blue"          "58BBY"    "female"       
## [62,] "yellow"              "blue"          "40BBY"    "female"       
## [63,] "light"               "brown"         "unknown"  "female"       
## [64,] "fair"                "brown"         "102BBY"   "male"         
## [65,] "tan"                 "brown"         "67BBY"    "male"         
## [66,] "tan"                 "brown"         "66BBY"    "male"         
## [67,] "fair, green, yellow" "yellow"        "unknown"  "female"       
## [68,] "brown"               "yellow"        "unknown"  "male"         
## [69,] "grey"                "black"         "unknown"  "male"         
## [70,] "grey"                "black"         "unknown"  "female"       
## [71,] "fair"                "blue"          "unknown"  "female"       
## [72,] "grey, blue"          "unknown"       "unknown"  "male"         
## [73,] "silver, red"         "red, blue"     "unknown"  "female"       
## [74,] "green, grey"         "unknown"       "unknown"  "male"         
## [75,] "grey"                "gold"          "unknown"  "male"         
## [76,] "red, blue, white"    "black"         "unknown"  "female"       
## [77,] "brown, white"        "green, yellow" "unknown"  "male"         
## [78,] "brown"               "blue"          "unknown"  "male"         
## [79,] "light"               "brown"         "unknown"  "male"         
## [80,] "pale"                "white"         "unknown"  "female"       
## [81,] "grey"                "black"         "unknown"  "male"         
## [82,] "dark"                "dark"          "unknown"  "male"         
## [83,] "light"               "hazel"         "unknown"  "female"       
## [84,] "light"               "brown"         "unknown"  "male"         
## [85,] "none"                "black"         "unknown"  "none"         
## [86,] "unknown"             "unknown"       "unknown"  "female"       
## [87,] "light"               "brown"         "46BBY"    "female"       
##       homeworld                         films                         
##  [1,] "http://swapi.co/api/planets/1/"  Character,5                   
##  [2,] "http://swapi.co/api/planets/1/"  Character,6                   
##  [3,] "http://swapi.co/api/planets/8/"  Character,7                   
##  [4,] "http://swapi.co/api/planets/1/"  Character,4                   
##  [5,] "http://swapi.co/api/planets/2/"  Character,5                   
##  [6,] "http://swapi.co/api/planets/1/"  Character,3                   
##  [7,] "http://swapi.co/api/planets/1/"  Character,3                   
##  [8,] "http://swapi.co/api/planets/1/"  "http://swapi.co/api/films/1/"
##  [9,] "http://swapi.co/api/planets/1/"  "http://swapi.co/api/films/1/"
## [10,] "http://swapi.co/api/planets/20/" Character,6                   
## [11,] "http://swapi.co/api/planets/1/"  Character,3                   
## [12,] "http://swapi.co/api/planets/21/" Character,2                   
## [13,] "http://swapi.co/api/planets/14/" Character,5                   
## [14,] "http://swapi.co/api/planets/22/" Character,4                   
## [15,] "http://swapi.co/api/planets/23/" "http://swapi.co/api/films/1/"
## [16,] "http://swapi.co/api/planets/24/" Character,3                   
## [17,] "http://swapi.co/api/planets/22/" Character,3                   
## [18,] "http://swapi.co/api/planets/26/" "http://swapi.co/api/films/1/"
## [19,] "http://swapi.co/api/planets/28/" Character,5                   
## [20,] "http://swapi.co/api/planets/8/"  Character,5                   
## [21,] "http://swapi.co/api/planets/10/" Character,3                   
## [22,] "http://swapi.co/api/planets/28/" "http://swapi.co/api/films/2/"
## [23,] "http://swapi.co/api/planets/29/" "http://swapi.co/api/films/2/"
## [24,] "http://swapi.co/api/planets/30/" Character,2                   
## [25,] "http://swapi.co/api/planets/6/"  "http://swapi.co/api/films/2/"
## [26,] "http://swapi.co/api/planets/31/" Character,2                   
## [27,] "http://swapi.co/api/planets/32/" "http://swapi.co/api/films/3/"
## [28,] "http://swapi.co/api/planets/28/" "http://swapi.co/api/films/3/"
## [29,] "http://swapi.co/api/planets/7/"  "http://swapi.co/api/films/3/"
## [30,] "http://swapi.co/api/planets/33/" "http://swapi.co/api/films/3/"
## [31,] "http://swapi.co/api/planets/28/" "http://swapi.co/api/films/4/"
## [32,] "http://swapi.co/api/planets/18/" Character,3                   
## [33,] "http://swapi.co/api/planets/9/"  "http://swapi.co/api/films/4/"
## [34,] "http://swapi.co/api/planets/8/"  Character,2                   
## [35,] "http://swapi.co/api/planets/8/"  "http://swapi.co/api/films/4/"
## [36,] "http://swapi.co/api/planets/8/"  "http://swapi.co/api/films/4/"
## [37,] "http://swapi.co/api/planets/8/"  "http://swapi.co/api/films/4/"
## [38,] "http://swapi.co/api/planets/34/" Character,2                   
## [39,] "http://swapi.co/api/planets/35/" "http://swapi.co/api/films/4/"
## [40,] "http://swapi.co/api/planets/8/"  "http://swapi.co/api/films/4/"
## [41,] "http://swapi.co/api/planets/1/"  Character,2                   
## [42,] "http://swapi.co/api/planets/36/" "http://swapi.co/api/films/4/"
## [43,] "http://swapi.co/api/planets/37/" "http://swapi.co/api/films/3/"
## [44,] "http://swapi.co/api/planets/37/" Character,3                   
## [45,] "http://swapi.co/api/planets/39/" "http://swapi.co/api/films/4/"
## [46,] "http://swapi.co/api/planets/40/" "http://swapi.co/api/films/4/"
## [47,] "http://swapi.co/api/planets/41/" "http://swapi.co/api/films/4/"
## [48,] "http://swapi.co/api/planets/42/" Character,3                   
## [49,] "http://swapi.co/api/planets/43/" Character,3                   
## [50,] "http://swapi.co/api/planets/44/" Character,3                   
## [51,] "http://swapi.co/api/planets/45/" Character,2                   
## [52,] "http://swapi.co/api/planets/9/"  Character,2                   
## [53,] "http://swapi.co/api/planets/47/" Character,2                   
## [54,] "http://swapi.co/api/planets/48/" "http://swapi.co/api/films/4/"
## [55,] "http://swapi.co/api/planets/49/" Character,3                   
## [56,] "http://swapi.co/api/planets/50/" Character,2                   
## [57,] "http://swapi.co/api/planets/8/"  "http://swapi.co/api/films/5/"
## [58,] "http://swapi.co/api/planets/8/"  "http://swapi.co/api/films/5/"
## [59,] "http://swapi.co/api/planets/1/"  "http://swapi.co/api/films/5/"
## [60,] "http://swapi.co/api/planets/11/" Character,2                   
## [61,] "http://swapi.co/api/planets/51/" Character,2                   
## [62,] "http://swapi.co/api/planets/51/" "http://swapi.co/api/films/5/"
## [63,] "http://swapi.co/api/planets/8/"  "http://swapi.co/api/films/5/"
## [64,] "http://swapi.co/api/planets/52/" Character,2                   
## [65,] "http://swapi.co/api/planets/2/"  Character,2                   
## [66,] "http://swapi.co/api/planets/53/" "http://swapi.co/api/films/5/"
## [67,] "http://swapi.co/api/planets/54/" "http://swapi.co/api/films/5/"
## [68,] "http://swapi.co/api/planets/55/" "http://swapi.co/api/films/5/"
## [69,] "http://swapi.co/api/planets/10/" "http://swapi.co/api/films/5/"
## [70,] "http://swapi.co/api/planets/10/" "http://swapi.co/api/films/5/"
## [71,] "http://swapi.co/api/planets/9/"  "http://swapi.co/api/films/5/"
## [72,] "http://swapi.co/api/planets/38/" "http://swapi.co/api/films/4/"
## [73,] "http://swapi.co/api/planets/28/" Character,2                   
## [74,] "http://swapi.co/api/planets/56/" "http://swapi.co/api/films/5/"
## [75,] "http://swapi.co/api/planets/57/" "http://swapi.co/api/films/5/"
## [76,] "http://swapi.co/api/planets/58/" Character,2                   
## [77,] "http://swapi.co/api/planets/59/" "http://swapi.co/api/films/6/"
## [78,] "http://swapi.co/api/planets/14/" "http://swapi.co/api/films/6/"
## [79,] "http://swapi.co/api/planets/2/"  Character,2                   
## [80,] "http://swapi.co/api/planets/60/" Character,2                   
## [81,] "http://swapi.co/api/planets/12/" "http://swapi.co/api/films/6/"
## [82,] "http://swapi.co/api/planets/28/" "http://swapi.co/api/films/7/"
## [83,] "http://swapi.co/api/planets/28/" "http://swapi.co/api/films/7/"
## [84,] "http://swapi.co/api/planets/28/" "http://swapi.co/api/films/7/"
## [85,] "http://swapi.co/api/planets/28/" "http://swapi.co/api/films/7/"
## [86,] "http://swapi.co/api/planets/28/" "http://swapi.co/api/films/7/"
## [87,] "http://swapi.co/api/planets/8/"  Character,3                   
##       species                            
##  [1,] "http://swapi.co/api/species/1/"   
##  [2,] "http://swapi.co/api/species/2/"   
##  [3,] "http://swapi.co/api/species/2/"   
##  [4,] "http://swapi.co/api/species/1/"   
##  [5,] "http://swapi.co/api/species/1/"   
##  [6,] "http://swapi.co/api/species/1/"   
##  [7,] "http://swapi.co/api/species/1/"   
##  [8,] "http://swapi.co/api/species/2/"   
##  [9,] "http://swapi.co/api/species/1/"   
## [10,] "http://swapi.co/api/species/1/"   
## [11,] "http://swapi.co/api/species/1/"   
## [12,] "http://swapi.co/api/species/1/"   
## [13,] "http://swapi.co/api/species/3/"   
## [14,] "http://swapi.co/api/species/1/"   
## [15,] "http://swapi.co/api/species/4/"   
## [16,] "http://swapi.co/api/species/5/"   
## [17,] "http://swapi.co/api/species/1/"   
## [18,] "http://swapi.co/api/species/1/"   
## [19,] "http://swapi.co/api/species/6/"   
## [20,] "http://swapi.co/api/species/1/"   
## [21,] "http://swapi.co/api/species/1/"   
## [22,] "http://swapi.co/api/species/2/"   
## [23,] "http://swapi.co/api/species/7/"   
## [24,] "http://swapi.co/api/species/1/"   
## [25,] "http://swapi.co/api/species/1/"   
## [26,] "http://swapi.co/api/species/8/"   
## [27,] "http://swapi.co/api/species/1/"   
## [28,] "http://swapi.co/api/species/1/"   
## [29,] "http://swapi.co/api/species/9/"   
## [30,] "http://swapi.co/api/species/10/"  
## [31,] "http://swapi.co/api/species/1/"   
## [32,] "http://swapi.co/api/species/11/"  
## [33,] "http://swapi.co/api/species/1/"   
## [34,] "http://swapi.co/api/species/12/"  
## [35,] "http://swapi.co/api/species/12/"  
## [36,] "http://swapi.co/api/species/12/"  
## [37,] "http://swapi.co/api/starships/40/"
## [38,] "http://swapi.co/api/species/13/"  
## [39,] "http://swapi.co/api/species/14/"  
## [40,] "2014-12-19T17:55:43.348000Z"      
## [41,] "http://swapi.co/api/species/1/"   
## [42,] "http://swapi.co/api/species/22/"  
## [43,] "http://swapi.co/api/species/15/"  
## [44,] "http://swapi.co/api/species/15/"  
## [45,] "http://swapi.co/api/species/17/"  
## [46,] "http://swapi.co/api/species/18/"  
## [47,] "http://swapi.co/api/species/19/"  
## [48,] "http://swapi.co/api/species/1/"   
## [49,] "http://swapi.co/api/species/20/"  
## [50,] "http://swapi.co/api/species/21/"  
## [51,] "http://swapi.co/api/species/22/"  
## [52,] "http://swapi.co/api/species/23/"  
## [53,] "http://swapi.co/api/species/24/"  
## [54,] "http://swapi.co/api/species/25/"  
## [55,] "http://swapi.co/api/species/26/"  
## [56,] "http://swapi.co/api/species/27/"  
## [57,] "http://swapi.co/api/species/1/"   
## [58,] "http://swapi.co/api/species/1/"   
## [59,] "http://swapi.co/api/species/1/"   
## [60,] "http://swapi.co/api/species/28/"  
## [61,] "http://swapi.co/api/species/29/"  
## [62,] "http://swapi.co/api/species/29/"  
## [63,] "http://swapi.co/api/species/1/"   
## [64,] "http://swapi.co/api/species/1/"   
## [65,] "http://swapi.co/api/species/1/"   
## [66,] "http://swapi.co/api/species/1/"   
## [67,] "http://swapi.co/api/species/30/"  
## [68,] "http://swapi.co/api/species/31/"  
## [69,] "http://swapi.co/api/species/32/"  
## [70,] "http://swapi.co/api/species/32/"  
## [71,] "http://swapi.co/api/species/1/"   
## [72,] "http://swapi.co/api/species/16/"  
## [73,] "2014-12-20T17:43:36.409000Z"      
## [74,] "http://swapi.co/api/species/33/"  
## [75,] "http://swapi.co/api/species/34/"  
## [76,] "http://swapi.co/api/species/35/"  
## [77,] "http://swapi.co/api/species/36/"  
## [78,] "http://swapi.co/api/species/3/"   
## [79,] "http://swapi.co/api/species/1/"   
## [80,] "2014-12-20T20:18:37.619000Z"      
## [81,] "http://swapi.co/api/species/37/"  
## [82,] "http://swapi.co/api/species/1/"   
## [83,] "http://swapi.co/api/species/1/"   
## [84,] "http://swapi.co/api/species/1/"   
## [85,] "http://swapi.co/api/species/2/"   
## [86,] "2015-10-13T10:35:39.229823Z"      
## [87,] "http://swapi.co/api/species/1/"   
##       vehicles                           
##  [1,] Character,2                        
##  [2,] "2014-12-10T15:10:51.357000Z"      
##  [3,] "2014-12-10T15:11:50.376000Z"      
##  [4,] "http://swapi.co/api/starships/13/"
##  [5,] "http://swapi.co/api/vehicles/30/" 
##  [6,] "2014-12-10T15:52:14.024000Z"      
##  [7,] "2014-12-10T15:53:41.121000Z"      
##  [8,] "2014-12-10T15:57:50.959000Z"      
##  [9,] "http://swapi.co/api/starships/12/"
## [10,] "http://swapi.co/api/vehicles/38/" 
## [11,] Character,2                        
## [12,] "2014-12-10T16:26:56.138000Z"      
## [13,] "http://swapi.co/api/vehicles/19/" 
## [14,] Character,2                        
## [15,] "2014-12-10T17:03:30.334000Z"      
## [16,] "2014-12-10T17:11:31.638000Z"      
## [17,] "http://swapi.co/api/vehicles/14/" 
## [18,] "http://swapi.co/api/starships/12/"
## [19,] "2014-12-15T12:26:01.042000Z"      
## [20,] "2014-12-15T12:48:05.971000Z"      
## [21,] "http://swapi.co/api/starships/21/"
## [22,] "2014-12-15T12:51:10.076000Z"      
## [23,] "2014-12-15T12:53:49.297000Z"      
## [24,] "http://swapi.co/api/starships/10/"
## [25,] "2014-12-15T13:01:57.178000Z"      
## [26,] "2014-12-18T11:07:50.584000Z"      
## [27,] "2014-12-18T11:12:38.895000Z"      
## [28,] "http://swapi.co/api/starships/28/"
## [29,] "2014-12-18T11:21:58.954000Z"      
## [30,] "http://swapi.co/api/starships/10/"
## [31,] "http://swapi.co/api/vehicles/38/" 
## [32,] "2014-12-19T17:05:57.357000Z"      
## [33,] "2014-12-19T17:21:45.915000Z"      
## [34,] "2014-12-19T17:29:32.489000Z"      
## [35,] "2014-12-19T17:32:56.741000Z"      
## [36,] "2014-12-19T17:33:38.909000Z"      
## [37,] "2014-12-19T17:45:01.522000Z"      
## [38,] "2014-12-19T17:48:54.647000Z"      
## [39,] "2014-12-19T17:53:02.586000Z"      
## [40,] "2014-12-20T21:17:50.399000Z"      
## [41,] "2014-12-19T17:57:41.191000Z"      
## [42,] "http://swapi.co/api/vehicles/42/" 
## [43,] "2014-12-20T09:47:02.512000Z"      
## [44,] "2014-12-20T09:48:01.172000Z"      
## [45,] "2014-12-20T09:57:31.858000Z"      
## [46,] "2014-12-20T10:02:12.223000Z"      
## [47,] "2014-12-20T10:08:33.777000Z"      
## [48,] "2014-12-20T10:12:30.846000Z"      
## [49,] "2014-12-20T10:15:32.293000Z"      
## [50,] "2014-12-20T10:18:57.202000Z"      
## [51,] "2014-12-20T10:26:47.902000Z"      
## [52,] "2014-12-20T10:29:11.661000Z"      
## [53,] "2014-12-20T10:32:11.669000Z"      
## [54,] "2014-12-20T10:34:48.725000Z"      
## [55,] "http://swapi.co/api/starships/48/"
## [56,] "2014-12-20T10:53:26.457000Z"      
## [57,] "http://swapi.co/api/starships/39/"
## [58,] "2014-12-20T11:11:39.630000Z"      
## [59,] "2014-12-20T15:59:03.958000Z"      
## [60,] "2014-12-20T16:40:43.977000Z"      
## [61,] "2014-12-20T16:45:53.668000Z"      
## [62,] "2014-12-20T16:46:40.440000Z"      
## [63,] "2014-12-20T16:49:14.640000Z"      
## [64,] "http://swapi.co/api/vehicles/55/" 
## [65,] "2014-12-20T16:53:08.575000Z"      
## [66,] "2014-12-20T16:54:41.620000Z"      
## [67,] "http://swapi.co/api/vehicles/45/" 
## [68,] "2014-12-20T17:28:27.248000Z"      
## [69,] "2014-12-20T17:30:50.416000Z"      
## [70,] "2014-12-20T17:31:21.195000Z"      
## [71,] "2014-12-20T17:32:51.996000Z"      
## [72,] "2014-12-20T09:53:15.086000Z"      
## [73,] "2014-12-20T21:17:50.478000Z"      
## [74,] "2014-12-20T17:53:52.607000Z"      
## [75,] "2014-12-20T17:58:17.049000Z"      
## [76,] "2014-12-20T18:44:01.103000Z"      
## [77,] "http://swapi.co/api/vehicles/60/" 
## [78,] "2014-12-20T19:46:34.209000Z"      
## [79,] "2014-12-20T19:49:35.583000Z"      
## [80,] "2014-12-20T21:17:50.496000Z"      
## [81,] "2014-12-20T20:35:04.260000Z"      
## [82,] "2015-04-17T06:52:40.793621Z"      
## [83,] "2015-04-17T06:54:01.495077Z"      
## [84,] "http://swapi.co/api/starships/77/"
## [85,] "2015-04-17T06:57:38.061346Z"      
## [86,] "2015-10-13T10:35:39.229894Z"      
## [87,] Character,3                        
##       starships                           created                         
##  [1,] Character,2                         "2014-12-09T13:50:51.644000Z"   
##  [2,] "2014-12-20T21:17:50.309000Z"       "http://swapi.co/api/people/2/" 
##  [3,] "2014-12-20T21:17:50.311000Z"       "http://swapi.co/api/people/3/" 
##  [4,] "2014-12-10T15:18:20.704000Z"       "2014-12-20T21:17:50.313000Z"   
##  [5,] "2014-12-10T15:20:09.791000Z"       "2014-12-20T21:17:50.315000Z"   
##  [6,] "2014-12-20T21:17:50.317000Z"       "http://swapi.co/api/people/6/" 
##  [7,] "2014-12-20T21:17:50.319000Z"       "http://swapi.co/api/people/7/" 
##  [8,] "2014-12-20T21:17:50.321000Z"       "http://swapi.co/api/people/8/" 
##  [9,] "2014-12-10T15:59:50.509000Z"       "2014-12-20T21:17:50.323000Z"   
## [10,] Character,5                         "2014-12-10T16:16:29.192000Z"   
## [11,] Character,3                         "2014-12-10T16:20:44.310000Z"   
## [12,] "2014-12-20T21:17:50.330000Z"       "http://swapi.co/api/people/12/"
## [13,] Character,2                         "2014-12-10T16:42:45.066000Z"   
## [14,] "2014-12-10T16:49:14.582000Z"       "2014-12-20T21:17:50.334000Z"   
## [15,] "2014-12-20T21:17:50.336000Z"       "http://swapi.co/api/people/15/"
## [16,] "2014-12-20T21:17:50.338000Z"       "http://swapi.co/api/people/16/"
## [17,] "http://swapi.co/api/starships/12/" "2014-12-12T11:08:06.469000Z"   
## [18,] "2014-12-12T11:16:56.569000Z"       "2014-12-20T21:17:50.343000Z"   
## [19,] "2014-12-20T21:17:50.345000Z"       "http://swapi.co/api/people/20/"
## [20,] "2014-12-20T21:17:50.347000Z"       "http://swapi.co/api/people/21/"
## [21,] "2014-12-15T12:49:32.457000Z"       "2014-12-20T21:17:50.349000Z"   
## [22,] "2014-12-20T21:17:50.351000Z"       "http://swapi.co/api/people/23/"
## [23,] "2014-12-20T21:17:50.355000Z"       "http://swapi.co/api/people/24/"
## [24,] "2014-12-15T12:56:32.683000Z"       "2014-12-20T21:17:50.357000Z"   
## [25,] "2014-12-20T21:17:50.359000Z"       "http://swapi.co/api/people/26/"
## [26,] "2014-12-20T21:17:50.362000Z"       "http://swapi.co/api/people/27/"
## [27,] "2014-12-20T21:17:50.364000Z"       "http://swapi.co/api/people/28/"
## [28,] "2014-12-18T11:16:33.020000Z"       "2014-12-20T21:17:50.367000Z"   
## [29,] "2014-12-20T21:17:50.369000Z"       "http://swapi.co/api/people/30/"
## [30,] "2014-12-18T11:26:18.541000Z"       "2014-12-20T21:17:50.371000Z"   
## [31,] "2014-12-19T16:54:53.618000Z"       "2014-12-20T21:17:50.375000Z"   
## [32,] "2014-12-20T21:17:50.377000Z"       "http://swapi.co/api/people/33/"
## [33,] "2014-12-20T21:17:50.379000Z"       "http://swapi.co/api/people/34/"
## [34,] "2014-12-20T21:17:50.383000Z"       "http://swapi.co/api/people/36/"
## [35,] "2014-12-20T21:17:50.385000Z"       "http://swapi.co/api/people/37/"
## [36,] "2014-12-20T21:17:50.388000Z"       "http://swapi.co/api/people/38/"
## [37,] "2014-12-20T21:17:50.392000Z"       "http://swapi.co/api/people/39/"
## [38,] "2014-12-20T21:17:50.395000Z"       "http://swapi.co/api/people/40/"
## [39,] "2014-12-20T21:17:50.397000Z"       "http://swapi.co/api/people/41/"
## [40,] "http://swapi.co/api/people/42/"    "Quarsh Panaka"                 
## [41,] "2014-12-20T21:17:50.401000Z"       "http://swapi.co/api/people/43/"
## [42,] "http://swapi.co/api/starships/41/" "2014-12-19T18:00:41.929000Z"   
## [43,] "2014-12-20T21:17:50.407000Z"       "http://swapi.co/api/people/45/"
## [44,] "2014-12-20T21:17:50.409000Z"       "http://swapi.co/api/people/46/"
## [45,] "2014-12-20T21:17:50.414000Z"       "http://swapi.co/api/people/48/"
## [46,] "2014-12-20T21:17:50.416000Z"       "http://swapi.co/api/people/49/"
## [47,] "2014-12-20T21:17:50.417000Z"       "http://swapi.co/api/people/50/"
## [48,] "2014-12-20T21:17:50.420000Z"       "http://swapi.co/api/people/51/"
## [49,] "2014-12-20T21:17:50.422000Z"       "http://swapi.co/api/people/52/"
## [50,] "2014-12-20T21:17:50.424000Z"       "http://swapi.co/api/people/53/"
## [51,] "2014-12-20T21:17:50.427000Z"       "http://swapi.co/api/people/54/"
## [52,] "2014-12-20T21:17:50.432000Z"       "http://swapi.co/api/people/55/"
## [53,] "2014-12-20T21:17:50.434000Z"       "http://swapi.co/api/people/56/"
## [54,] "2014-12-20T21:17:50.437000Z"       "http://swapi.co/api/people/57/"
## [55,] "2014-12-20T10:49:19.859000Z"       "2014-12-20T21:17:50.439000Z"   
## [56,] "2014-12-20T21:17:50.442000Z"       "http://swapi.co/api/people/59/"
## [57,] "2014-12-20T11:10:10.381000Z"       "2014-12-20T21:17:50.445000Z"   
## [58,] "2014-12-20T21:17:50.449000Z"       "http://swapi.co/api/people/61/"
## [59,] "2014-12-20T21:17:50.451000Z"       "http://swapi.co/api/people/62/"
## [60,] "2014-12-20T21:17:50.453000Z"       "http://swapi.co/api/people/63/"
## [61,] "2014-12-20T21:17:50.455000Z"       "http://swapi.co/api/people/64/"
## [62,] "2014-12-20T21:17:50.457000Z"       "http://swapi.co/api/people/65/"
## [63,] "2014-12-20T21:17:50.460000Z"       "http://swapi.co/api/people/66/"
## [64,] "2014-12-20T16:52:14.726000Z"       "2014-12-20T21:17:50.462000Z"   
## [65,] "2014-12-20T21:17:50.463000Z"       "http://swapi.co/api/people/68/"
## [66,] "2014-12-20T21:17:50.465000Z"       "http://swapi.co/api/people/69/"
## [67,] "2014-12-20T16:57:44.471000Z"       "2014-12-20T21:17:50.468000Z"   
## [68,] "2014-12-20T21:17:50.470000Z"       "http://swapi.co/api/people/71/"
## [69,] "2014-12-20T21:17:50.473000Z"       "http://swapi.co/api/people/72/"
## [70,] "2014-12-20T21:17:50.474000Z"       "http://swapi.co/api/people/73/"
## [71,] "2014-12-20T21:17:50.476000Z"       "http://swapi.co/api/people/74/"
## [72,] "2016-06-30T12:52:19.604868Z"       "http://swapi.co/api/people/47/"
## [73,] "http://swapi.co/api/people/75/"    "R4-P17"                        
## [74,] "2014-12-20T21:17:50.481000Z"       "http://swapi.co/api/people/76/"
## [75,] "2014-12-20T21:17:50.484000Z"       "http://swapi.co/api/people/77/"
## [76,] "2014-12-20T21:17:50.486000Z"       "http://swapi.co/api/people/78/"
## [77,] "http://swapi.co/api/starships/74/" "2014-12-20T19:43:53.348000Z"   
## [78,] "2014-12-20T21:17:50.491000Z"       "http://swapi.co/api/people/80/"
## [79,] "2014-12-20T21:17:50.493000Z"       "http://swapi.co/api/people/81/"
## [80,] "http://swapi.co/api/people/82/"    "Sly Moore"                     
## [81,] "2014-12-20T21:17:50.498000Z"       "http://swapi.co/api/people/83/"
## [82,] "2015-04-17T06:52:40.793674Z"       "http://swapi.co/api/people/84/"
## [83,] "2015-04-17T06:54:01.495128Z"       "http://swapi.co/api/people/85/"
## [84,] "2015-04-17T06:55:21.622786Z"       "2015-04-17T06:55:21.622835Z"   
## [85,] "2015-04-17T06:57:38.061453Z"       "http://swapi.co/api/people/87/"
## [86,] "http://swapi.co/api/people/88/"    "Captain Phasma"                
## [87,] "2014-12-19T17:28:26.926000Z"       "2016-04-20T17:06:31.502555Z"   
##       edited                           url                             
##  [1,] "2014-12-20T21:17:56.891000Z"    "http://swapi.co/api/people/1/" 
##  [2,] "C-3PO"                          "167"                           
##  [3,] "R2-D2"                          "96"                            
##  [4,] "http://swapi.co/api/people/4/"  "Darth Vader"                   
##  [5,] "http://swapi.co/api/people/5/"  "Leia Organa"                   
##  [6,] "Owen Lars"                      "178"                           
##  [7,] "Beru Whitesun lars"             "165"                           
##  [8,] "R5-D4"                          "97"                            
##  [9,] "http://swapi.co/api/people/9/"  "Biggs Darklighter"             
## [10,] "2014-12-20T21:17:50.325000Z"    "http://swapi.co/api/people/10/"
## [11,] "2014-12-20T21:17:50.327000Z"    "http://swapi.co/api/people/11/"
## [12,] "Wilhuff Tarkin"                 "180"                           
## [13,] "2014-12-20T21:17:50.332000Z"    "http://swapi.co/api/people/13/"
## [14,] "http://swapi.co/api/people/14/" "Han Solo"                      
## [15,] "Greedo"                         "173"                           
## [16,] "Jabba Desilijic Tiure"          "175"                           
## [17,] "2014-12-20T21:17:50.341000Z"    "http://swapi.co/api/people/18/"
## [18,] "http://swapi.co/api/people/19/" "Jek Tono Porkins"              
## [19,] "Yoda"                           "66"                            
## [20,] "Palpatine"                      "170"                           
## [21,] "http://swapi.co/api/people/22/" "Boba Fett"                     
## [22,] "IG-88"                          "200"                           
## [23,] "Bossk"                          "190"                           
## [24,] "http://swapi.co/api/people/25/" "Lando Calrissian"              
## [25,] "Lobot"                          "175"                           
## [26,] "Ackbar"                         "180"                           
## [27,] "Mon Mothma"                     "150"                           
## [28,] "http://swapi.co/api/people/29/" "Arvel Crynyd"                  
## [29,] "Wicket Systri Warrick"          "88"                            
## [30,] "http://swapi.co/api/people/31/" "Nien Nunb"                     
## [31,] "http://swapi.co/api/people/32/" "Qui-Gon Jinn"                  
## [32,] "Nute Gunray"                    "191"                           
## [33,] "Finis Valorum"                  "170"                           
## [34,] "Jar Jar Binks"                  "196"                           
## [35,] "Roos Tarpals"                   "224"                           
## [36,] "Rugor Nass"                     "206"                           
## [37,] "Ric Olié"                       "183"                           
## [38,] "Watto"                          "137"                           
## [39,] "Sebulba"                        "112"                           
## [40,] "183"                            "unknown"                       
## [41,] "Shmi Skywalker"                 "163"                           
## [42,] "2014-12-20T21:17:50.403000Z"    "http://swapi.co/api/people/44/"
## [43,] "Bib Fortuna"                    "180"                           
## [44,] "Ayla Secura"                    "178"                           
## [45,] "Dud Bolt"                       "94"                            
## [46,] "Gasgano"                        "122"                           
## [47,] "Ben Quadinaros"                 "163"                           
## [48,] "Mace Windu"                     "188"                           
## [49,] "Ki-Adi-Mundi"                   "198"                           
## [50,] "Kit Fisto"                      "196"                           
## [51,] "Eeth Koth"                      "171"                           
## [52,] "Adi Gallia"                     "184"                           
## [53,] "Saesee Tiin"                    "188"                           
## [54,] "Yarael Poof"                    "264"                           
## [55,] "http://swapi.co/api/people/58/" "Plo Koon"                      
## [56,] "Mas Amedda"                     "196"                           
## [57,] "http://swapi.co/api/people/60/" "Gregar Typho"                  
## [58,] "Cordé"                          "157"                           
## [59,] "Cliegg Lars"                    "183"                           
## [60,] "Poggle the Lesser"              "183"                           
## [61,] "Luminara Unduli"                "170"                           
## [62,] "Barriss Offee"                  "166"                           
## [63,] "Dormé"                          "165"                           
## [64,] "http://swapi.co/api/people/67/" "Dooku"                         
## [65,] "Bail Prestor Organa"            "191"                           
## [66,] "Jango Fett"                     "183"                           
## [67,] "http://swapi.co/api/people/70/" "Zam Wesell"                    
## [68,] "Dexter Jettster"                "198"                           
## [69,] "Lama Su"                        "229"                           
## [70,] "Taun We"                        "213"                           
## [71,] "Jocasta Nu"                     "167"                           
## [72,] "Ratts Tyerell"                  "79"                            
## [73,] "96"                             "unknown"                       
## [74,] "Wat Tambor"                     "193"                           
## [75,] "San Hill"                       "191"                           
## [76,] "Shaak Ti"                       "178"                           
## [77,] "2014-12-20T21:17:50.488000Z"    "http://swapi.co/api/people/79/"
## [78,] "Tarfful"                        "234"                           
## [79,] "Raymus Antilles"                "188"                           
## [80,] "178"                            "48"                            
## [81,] "Tion Medon"                     "206"                           
## [82,] "Finn"                           "unknown"                       
## [83,] "Rey"                            "unknown"                       
## [84,] "http://swapi.co/api/people/86/" "Poe Dameron"                   
## [85,] "BB8"                            "unknown"                       
## [86,] "unknown"                        "unknown"                       
## [87,] "http://swapi.co/api/people/35/" "Padmé Amidala"
do.call(rbind, sw_people) %>% 
  tbl_df() %>%
  mutate(name = unlist(name))
## Warning in (function (..., deparse.level = 1) : number of columns of result
## is not a multiple of vector length (arg 2)
## # A tibble: 87 x 16
##    name    height  mass  hair_color skin_color eye_color birth_year gender
##    <chr>   <list>  <lis> <list>     <list>     <list>    <list>     <list>
##  1 Luke S… <chr [… <chr… <chr [1]>  <chr [1]>  <chr [1]> <chr [1]>  <chr …
##  2 C-3PO   <chr [… <chr… <chr [1]>  <chr [1]>  <chr [1]> <chr [1]>  <chr …
##  3 R2-D2   <chr [… <chr… <chr [1]>  <chr [1]>  <chr [1]> <chr [1]>  <chr …
##  4 Darth … <chr [… <chr… <chr [1]>  <chr [1]>  <chr [1]> <chr [1]>  <chr …
##  5 Leia O… <chr [… <chr… <chr [1]>  <chr [1]>  <chr [1]> <chr [1]>  <chr …
##  6 Owen L… <chr [… <chr… <chr [1]>  <chr [1]>  <chr [1]> <chr [1]>  <chr …
##  7 Beru W… <chr [… <chr… <chr [1]>  <chr [1]>  <chr [1]> <chr [1]>  <chr …
##  8 R5-D4   <chr [… <chr… <chr [1]>  <chr [1]>  <chr [1]> <chr [1]>  <chr …
##  9 Biggs … <chr [… <chr… <chr [1]>  <chr [1]>  <chr [1]> <chr [1]>  <chr …
## 10 Obi-Wa… <chr [… <chr… <chr [1]>  <chr [1]>  <chr [1]> <chr [1]>  <chr …
## # ... with 77 more rows, and 8 more variables: homeworld <list>,
## #   films <list>, species <list>, vehicles <list>, starships <list>,
## #   created <list>, edited <list>, url <list>
df_f1 = function() {
  data_frame(
    name = map_chr(sw_people, "name"),
    height = map_chr(sw_people, "height") %>% parse_numeric(),
    mass = map_chr(sw_people, "mass") %>% parse_numeric(),
    starships = map(sw_people, "starships")
  )
}


parse_numeric = function(x) {
  suppressWarnings(
    x %>%
      stringr::str_replace(",","") %>%
      as.numeric()
  )
}

df_f2 = function() {
  map_dfr(
    sw_people,
    function(char) {
      data_frame(
        name = char %>% pluck("name"), 
        height = char %>% pluck("height") %>% parse_numeric(),
        mass = char %>% pluck("mass") %>% parse_numeric(),
        starships = char %>% pluck("starships") %>% list()
      )
    }
  )
}

microbenchmark(df_f1(), df_f2(), times = 1)
## Unit: milliseconds
##     expr        min         lq       mean     median         uq        max
##  df_f1()   7.154616   7.154616   7.154616   7.154616   7.154616   7.154616
##  df_f2() 202.729176 202.729176 202.729176 202.729176 202.729176 202.729176
##  neval
##      1
##      1

unnest and starships

data_frame(
  name = map_chr(sw_people, "name"),
  height = map_chr(sw_people, "height") %>% parse_numeric(),
  mass = map_chr(sw_people, "mass") %>% parse_numeric(),
  starships = map(sw_people, "starships")
) %>%
  mutate(starships = map(starships, ~ if(is.null(.x)) NULL else .x)) %>%
  tidyr::unnest()
## Error: Each column must either be a list of vectors or a list of data frames [starships]
data_frame(
  name = map_chr(sw_people, "name"),
  height = map_chr(sw_people, "height") %>% parse_numeric(),
  mass = map_chr(sw_people, "mass") %>% parse_numeric(),
  starships = map(sw_people, "starships")
) %>%
  mutate(starships = map(starships, ~ if(is.null(.x)) NA else .x)) %>%
  tidyr::unnest()
## # A tibble: 98 x 4
##    name               height  mass starships                        
##    <chr>               <dbl> <dbl> <chr>                            
##  1 Luke Skywalker      172    77.0 http://swapi.co/api/starships/12/
##  2 Luke Skywalker      172    77.0 http://swapi.co/api/starships/22/
##  3 C-3PO               167    75.0 <NA>                             
##  4 R2-D2                96.0  32.0 <NA>                             
##  5 Darth Vader         202   136   http://swapi.co/api/starships/13/
##  6 Leia Organa         150    49.0 <NA>                             
##  7 Owen Lars           178   120   <NA>                             
##  8 Beru Whitesun lars  165    75.0 <NA>                             
##  9 R5-D4                97.0  32.0 <NA>                             
## 10 Biggs Darklighter   183    84.0 http://swapi.co/api/starships/12/
## # ... with 88 more rows

List Columns

HW2 Q6

  1. What are the seven most popular hobbies of lego purchasers?
sales = readRDS("data/lego_sales.rds")

sales %>%
  distinct(first_name, last_name) %>%
  nrow()
## [1] 250
sales %>%
  distinct(first_name, last_name, hobbies) %>%
  nrow()
## [1] 620
sales %>%
  group_by(first_name, last_name) %>%
  slice(1) %>%
  select(hobbies) %>% 
  transmute(hobbies = unlist(hobbies))
## Adding missing grouping variables: `first_name`, `last_name`
## Error in mutate_impl(.data, dots): Column `hobbies` must be length 1 (the group size), not 0

dplyr only approach

sales %>%
  group_by(first_name, last_name) %>%
  slice(1) %>%
  pull(hobbies) %>%
  unlist() %>%
  data_frame(hobbies = .) %>%
  group_by(hobbies) %>%
  count() %>%
  ungroup() %>%
  arrange(desc(n)) %>%
  top_n(7)
## Selecting by n
## # A tibble: 12 x 2
##    hobbies                 n
##    <chr>               <int>
##  1 Animal fancy            6
##  2 Skateboarding           6
##  3 Kitesurfing             5
##  4 Sculling or Rowing      5
##  5 Baseball                4
##  6 Bodybuilding            4
##  7 Gunsmithing             4
##  8 Herping                 4
##  9 Reading                 4
## 10 Seashell collecting     4
## 11 Topiary                 4
## 12 Volleyball              4

dplyr + tidyr approach

sales %>%
  group_by(first_name, last_name) %>%
  slice(1) %>%
  ungroup() %>%
  select(first_name, last_name, hobbies) 
## # A tibble: 250 x 3
##    first_name last_name hobbies  
##    <chr>      <chr>     <list>   
##  1 Aaron      Bruner    <chr [1]>
##  2 Abigayle   Hosman    <chr [0]>
##  3 Abraham    Medlock   <chr [2]>
##  4 Adam       Albornoz  <chr [2]>
##  5 Adam       Mehdinia  <chr [3]>
##  6 Adoria     Hammond   <chr [0]>
##  7 Aiden      Ganley    <chr [2]>
##  8 Alejandre  Baek      <chr [2]>
##  9 Aleksandr  Gurrola   <chr [0]>
## 10 Alex       Ford      <chr [2]>
## # ... with 240 more rows
sales %>%
  group_by(first_name, last_name) %>%
  slice(1) %>%
  ungroup() %>%
  select(first_name, last_name, hobbies) %>%
  tidyr::unnest() %>%
  group_by(hobbies) %>%
  count() %>%
  ungroup() %>%
  arrange(desc(n)) %>%
  top_n(7)
## Selecting by n
## # A tibble: 12 x 2
##    hobbies                 n
##    <chr>               <int>
##  1 Animal fancy            6
##  2 Skateboarding           6
##  3 Kitesurfing             5
##  4 Sculling or Rowing      5
##  5 Baseball                4
##  6 Bodybuilding            4
##  7 Gunsmithing             4
##  8 Herping                 4
##  9 Reading                 4
## 10 Seashell collecting     4
## 11 Topiary                 4
## 12 Volleyball              4