La differenza tra Map () e map () dal pacchetto Purrr in R
ciao stavo cercando di aggiungere una colonna del nome in tutti gli elementi della mia lista usando i nomi della lista. Cioè ho 8 tabelle nella mia lista, ogni tabella ha il proprio nome tabella 1 ... 8. Quindi in seguito posso toglierli dall'elenco e distinguere da dove proviene la tabella.
Ho letto questo post e il codice funziona. R - Aggiungi colonne ai dataframe nell'elenco scorrendo gli elementi in un vettore
my_list <- Map(cbind, mylist, Cluster = names(mylist))
Tuttavia, non capisco abbastanza il Map (). Questa non è la map () dal pacchetto Purrr, giusto? map () prenderà gli argomenti nell'ordine map (data, function). Ho controllato nella guida di Rstudio su Map, sembra più confuso. E se devo usare la funzione mappa Purrr, ho provato questo
my_list2 <- map(mylist, function(x)cbind(x,Cluster = names(x)))
non ha funzionato. qualcuno potrebbe spiegarmi come funziona Map e se userò map (), quali sono i cambiamenti che dovrei fare?
Risposte
Sono davvero funzioni diverse. Se la tua lista è già nominata, puoi certamente usare purrr::mapper aggiungere una colonna con nome. Consulta questa domanda recente poiché non hai fornito alcuna specifica.
La migliore ipotesi su quello che vuoi è:
purrr::map2(mylist, names(mylist), ~ mutate(.x, new_column_name = .y))
Forse questo è quello che stai cercando. Per aggiungere una colonna con il nome della lista devi scorrere sia la lista che i nomi. Questo potrebbe essere facilmente ottenuto tramite il purrr::imapquale è un wrapper purrr::map2o puoi usare la base Map. La differenza principale è probabilmente che nella Mapfunzione da applicare è il primo argomento. Inoltre, la purrrfamiglia di mapfunzioni consente di utilizzare la notazione delle formule (vedere l'esempio nel mio codice) per scrivere funzioni anonime
mylist <- list(
a = data.frame(x = 1 , y = 2),
b = data.frame(x = 3, y = 4)
)
purrr::imap(mylist, ~ cbind(.x, Cluster = .y))
#> $a #> x y Cluster #> 1 1 2 a #> #> $b
#> x y Cluster
#> 1 3 4 b
Map(function(x, y) { cbind(x, Cluster = y) }, mylist, names(mylist))
#> $a #> x y Cluster #> 1 1 2 a #> #> $b
#> x y Cluster
#> 1 3 4 b