2012-01-27 15 views
16

Esto es terriblemente básico pero me parece que no puede averiguarloAgregar llamado vector a una lista

Supongamos que tengo una lista de entradas variables:

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

Si quiero añadir un vector a esto con un nombre especificado que debería ser capaz de hacerlo a través de:

c(f=1:5, lst) 

Pero en lugar de crear una entrada llamada 'f' que contiene 1 2 3 4 5 crea cinco entradas (F1 - F5) que contienen una de los números cada uno

¿Cómo puedo suprimir este comportamiento?

Sé que puedo utilizar

lst$f <- 1:5 

pero me gustaría añadir la lista dentro de una llamada de función ...

Respuesta

16

Encienda f en una lista de uno, y luego concatenarlo:

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

+0

Por supuesto. Me hiciste sentir un poco estúpido, pero sabía que eso sucedería cuando formulara la pregunta. Gracias por la ayuda :-) – ThomasP85

5

solución Más versátil es con append:

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

sólo se puede hacer:

lst[[key]] <- any_object 

(tenga en cuenta los dobles corchetes [[]])

any_object puede, por supuesto, ser un vector.

Este método tiene la ventaja de ser utilizable incluso si el valor exacto de key se almacena en una variable y no se sabe de antemano, o si es la variable que se reiteró en un bucle for por ejemplo:

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

aquí es una simple función para añadir una (o más) elemento a una lista:

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 

Espero que ayude !! Adiós.

Cuestiones relacionadas