2010-04-20 19 views
69

¿Es posible crear nuevos nombres de variables sobre la marcha?¿Cómo nombrar variables sobre la marcha?

Me gustaría leer los marcos de datos de una lista en nuevas variables con números al final. Algo así como orca1, orca2, orca3 ...

Si intento algo así como

paste("orca",i,sep="")=list_name[[i]] 

me sale este error

target of assignment expands to non-language object 

¿Hay alguna otra forma de evitar esto?

+7

Mientras que estamos dando a cabo etiquetas r-FAQ Démosle al enlace (FAQ 7.21: http://cran.r-project.org/doc/FAQ/R-FAQ.html#How-can-I -turn-a-string-into-a-variable_003f) –

Respuesta

93

Uso de asignación:

assign(paste("orca",i,sep=""), list_name[[i]]) 
+26

Así es como hacer esto. Aquí hay una meta-pregunta que es: "¿Debo hacer esto?" La respuesta es casi siempre "no". Los elementos con nombre en una lista son casi siempre preferidos. –

+17

La respuesta casi siempre es "no", excepto cuando no lo es. – Shane

+8

Bueno, por supuesto. Pero la mayoría de las personas que buscan esta respuesta no lo hacen desde la posición de haber rechazado una lista para su solicitud. –

30

Me parece que podría ser mejor con una lista en lugar de utilizar orca1, orca2, etc, ... entonces sería orca[1], orca[2], ...

Normalmente está haciendo una lista de variables diferenciadas por nada más que un número porque ese número sería una forma conveniente de acceder a ellas más tarde.

orca <- list() 
orca[1] <- "Hi" 
orca[2] <- 59 

De lo contrario, assign es justo lo que quieres.

+9

Estoy de acuerdo. Por lo general, cuando las personas piensan que quieren nombrar variables sobre la marcha, lo que realmente quieren es una estructura de datos diferente. –

+8

+1 (FAQ 7.21: http://cran.r-project.org/doc/FAQ/R-FAQ.html#How-can-I-turn-a-string-into-a-variable_003f) discute esto muy bien –

0

Otra solución es complicado para nombrar los elementos de la lista y se attach:

list_name = list(
    head(iris), 
    head(swiss), 
    head(airquality) 
    ) 

names(list_name) <- paste("orca", seq_along(list_name), sep="") 
attach(list_name) 

orca1 
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species 
# 1   5.1   3.5   1.4   0.2 setosa 
# 2   4.9   3.0   1.4   0.2 setosa 
# 3   4.7   3.2   1.3   0.2 setosa 
# 4   4.6   3.1   1.5   0.2 setosa 
# 5   5.0   3.6   1.4   0.2 setosa 
# 6   5.4   3.9   1.7   0.4 setosa 
+13

complicado, pero no sabio. si la respuesta es "adjuntar", por lo general hace una pregunta incorrecta ... –

9

No cometa tramas de datos. Guarde la lista, nombre sus elementos pero no los adjunte.

La razón principal de esto es que si realiza variables sobre la marcha, casi siempre tendrá que iterar a través de cada una de ellas para realizar algo útil. Allí nuevamente se verá obligado a iterar a través de cada uno de los nombres que ha creado sobre la marcha.

Es mucho más fácil nombrar los elementos de la lista e iterar por los nombres.

En lo que respecta a la conexión, su práctica de programación es realmente mala en R y puede provocar muchos problemas si no tiene cuidado.

-2

¿Y esta opción?

list_name<-list() 
for(i in 1:100){ 
    paste("orca",i,sep="")->list_name[[i]] 
} 

Funciona perfectamente. En el ejemplo que pones, falta la primera línea y luego aparece el mensaje de error.

+3

Esto no responde a la pregunta de OP. Tenemos una lista con dataframes, y queremos asignarla a marcos de datos, nombrados como orca1, orca2, etc. – zx8754

Cuestiones relacionadas