2012-01-27 13 views
16

Questo è terribilmente semplice, ma io non riesco a capirloAdd chiamato vettore a un elenco

Supponiamo che io sono un elenco di voci variabili:

lst <- list(a=1:4, b=rep('k', 5), c=3) 

Se voglio aggiungere un vettore per questo con un nome specificato dovrei essere in grado di farlo:

c(f=1:5, lst) 

Ma invece di creare una voce chiamata 'f' contenente 1 2 3 4 5 crea cinque voci (F1 - F5) che contengono una delle i numeri ciascuno.

Come si sopprime questo comportamento?

So che posso usare

lst$f <- 1:5 

ma vorrei aggiungere l'elenco all'interno di una chiamata di funzione ...

risposta

16

Girare f in una lista di uno, e poi concatenare esso:

c(list(f=1:5), lst)

+0

Naturalmente. Mi hai fatto sentire un po 'stupido, ma sapevo che sarebbe successo quando avessi posto la domanda. Grazie per l'aiuto :-) – ThomasP85

5

soluzione Più versatile è con accodamento:

append(lst, list(f=1:5), after=0)# after - position to append 
10

si può solo fare:

lst[[key]] <- any_object 

(notare le doppie parentesi quadre [[]])

any_object può, naturalmente, essere un vettore.

Questo metodo ha il vantaggio di essere utilizzabile anche se il valore esatto di key è memorizzato in una variabile e non si conosce in anticipo, o se è l'essere variabili iterata in un ciclo for ad esempio:

count <- list() 
for (k in c("boys","girls","other")) { 
    count[[k]] <- sum(data == k) 
} 
12

qui è una funzione semplice per aggiungere una (o più) elemento a un elenco:

lappend <- function (lst, ...){ 
lst <- c(lst, list(...)) 
    return(lst) 
} 

> a <- list() 
> a 
list() 

> lappend(a,c(1,2,3)) 
[[1]] 
[1] 1 2 3 

> lappend(a, c(4,5,6), c(7,8,9)) 
[[1]] 
[1] 4 5 6 

[[2]] 
[1] 7 8 9 

Speranza che aiuta !! Ciao.