Czy jest jakiś powód, dla którego powinienem używać
map(<list-like-object>, function(x) <do stuff>)
zamiast
lapply(<list-like-object>, function(x) <do stuff>)
wynik powinien być taki sam, a benchmarki, które stworzyłem, wydają się wskazywać, że lapply
jest nieco szybszy (powinno być tak samo, jak map
trzeba, aby ocenić wszystkie niestandardowe dane wejściowe do oceny).
Czy jest więc jakiś powód, dla którego w tak prostych przypadkach powinienem rozważyć przejście na purrr::map
? Nie pytam tutaj o swoje upodobania lub antypatie dotyczące składni, innych funkcjonalności, które zapewnia mruczenie itp., A stricte o porównanie purrr::map
z lapply
założeniem, że stosuje się ocenę standardową, tj map(<list-like-object>, function(x) <do stuff>)
. Czy jest jakaś korzyść purrr::map
pod względem wydajności, obsługi wyjątków itp.? Poniższe komentarze sugerują, że tak nie jest, ale może ktoś mógłby rozwinąć trochę więcej?
~{}
skrót lambda (z {}
pieczęciami lub bez, to dla mnie sprawa dla zwykłego purrr::map()
. Egzekwowanie typów purrr::map_…()
jest poręczne i mniej rozwlekłe niż vapply()
. purrr::map_df()
jest bardzo kosztowną funkcją, ale także upraszcza kod. Nie ma absolutnie nic złego w trzymaniu się bazy R [lsv]apply()
, chociaż ,
purrr
rzeczy. Chodzi mi o to: tidyverse
jest fantastyczny do analiz / interaktywnych / raportów, a nie do programowania. Jeśli musisz używać lapply
lub map
programujesz i pewnego dnia możesz skończyć z utworzeniem pakietu. Im mniej zależności, tym lepiej. Plus: czasami widzę ludzi używających map
później dość niejasnej składni. A teraz, gdy widzę testy wydajności: jeśli jesteś przyzwyczajony do apply
rodziny: trzymaj się tego.
tidyverse
, możesz skorzystać ze składni%>%
~ .x + 1