data - r named list




Creare una lista nominata da due vettori(nomi, valori) (2)

Condivido la perplessità di Ben sul perché potresti voler fare questo, e sulla sua raccomandazione.

Solo per curiosità, c'è una sorta di funzionalità "nascosta" in mapply che permetterà questo:

x <- letters[1:2]
y <- 1:2
mapply(function(x,y) { y }, x, y, SIMPLIFY = FALSE,USE.NAMES = TRUE)
$a
[1] 1

$b
[1] 2

Notando che la documentazione per USE.NAMES dice:

USE.NAMES logico; usa i nomi se il primo argomento ha nomi, o se è un vettore di caratteri, usa quel vettore di caratteri come nome.

C'è un modo per usare mapply su due vettori per costruire una lista nominata? Il primo vettore dovrebbe essere di tipo character e contenere i nomi utilizzati per l'elenco mentre il secondo contiene i valori.

Finora, l'unica soluzione che ho è:

> dummyList = list()
> addToList <- function(name, value) {
+ dummyList[[name]] <- value
+ }
> mapply(addToList, c("foo", "bar"), as.list(c(1, 2))
$foo
`1`

$bar
`2`

Sembra una soluzione piuttosto inventata, ma non riesco a capire come farlo altrimenti. I problemi che ho con esso sono:

  1. Richiede la creazione di dummyList anche se dummyList non viene mai modificata ed è una lista vuota dopo la chiamata a mapply .

  2. Se il vettore numerico, c(1, 2) , non viene convertito in un elenco, il risultato della chiamata a mapply è un vettore denominato di doppi.

Per aggirare il problema 2, posso sempre chiamare mapply su due vettori e poi chiamare as.list sul risultato, ma sembra che ci dovrebbe essere un modo per creare direttamente un elenco con i valori presenti in un vettore.


Puoi usare setNames()

setNames(as.list(c(1, 2)), c("foo", "bar"))

(per una lista) o

setNames(c(1, 2), c("foo", "bar"))

(per un vettore)





named