C'è qualche motivo per cui dovrei usare
map(<list-like-object>, function(x) <do stuff>)
invece di
lapply(<list-like-object>, function(x) <do stuff>)
l'output dovrebbe essere lo stesso e i benchmark che ho fatto sembrano mostrare che lapply
è leggermente più veloce (dovrebbe essere come map
necessità per valutare tutti gli input di valutazione non standard).
Quindi c'è qualche motivo per cui per casi così semplici dovrei davvero prendere in considerazione il passaggio a purrr::map
? Non sto chiedendo qui riguardo ai propri gusti o antipatie sulla sintassi, altre funzionalità fornite da Purrr ecc., Ma rigorosamente sul confronto purrr::map
con l' lapply
assunzione usando la valutazione standard, cioè map(<list-like-object>, function(x) <do stuff>)
. C'è qualche vantaggio purrr::map
in termini di prestazioni, gestione delle eccezioni ecc.? I commenti qui sotto suggeriscono che non lo è, ma forse qualcuno potrebbe elaborare un po 'di più?
~{}
scorciatoia lambda (con o senza i {}
sigilli l'affare per me in modo chiaro purrr::map()
. L'applicazione del tipo purrr::map_…()
è pratica e meno ottusa di vapply()
. purrr::map_df()
è una funzione super costosa ma semplifica anche il codice. Non c'è assolutamente nulla di sbagliato nel rimanere con la base R [lsv]apply()
, sebbene .
purrr
cose. Il mio punto è il seguente: tidyverse
è favoloso per analisi / contenuti interattivi / report, non per la programmazione. Se ti stai impegnando lapply
o map
stai programmando e potresti finire un giorno con la creazione di un pacchetto. Quindi meno dipendenze sono, meglio è. Inoltre: a volte vedo persone che usano map
con sintassi abbastanza oscura dopo. E ora che vedo i test delle prestazioni: se sei abituato alla apply
famiglia: atteniti ad esso.
tidyverse
sebbene, si può beneficiare della sintassi di pipe%>%
e funzioni anonime~ .x + 1