Pregunta ¿Cómo nombrar variables sobre la marcha?


¿Es posible crear nuevos nombres de variables sobre la marcha?

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

Si intento algo como

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

Me sale este error

target of assignment expands to non-language object

¿Conoces alguna otra manera de resolver esto?


74
2018-04-20 22:38


origen


Respuestas:


Utilizar assign:

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

101
2018-04-20 23:03



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

Usualmente 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 otra manera, assign es justo lo que quieres


30
2018-04-21 00:11



No hagas marcos de datos. Guarde la lista, nombre sus elementos pero no los adjunte.

La razón principal de esto es que si hace 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 a través de los nombres.

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


9
2017-10-07 13:21



Otra solución difícil es nombrar elementos de la lista y attach eso:

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

0
2018-04-21 09:33



Preguntas frecuentes dice:

Si usted tiene

varname <- c("a", "b", "d")

tu puedes hacer

get(varname[1]) + 2

para

a + 2

o

assign(varname[1], 2 + 2)

para

a <- 2 + 2

Por lo tanto, parece que usa GET cuando quiere evaluar una fórmula que usa una variable (como una concatenación) y ASSIGN cuando desea asignar un valor a una variable preestablecida.

Sintaxis para asignar:  asignar (x, valor)

X: un nombre de variable, dado como una cadena de caracteres. No se realiza ninguna coacción, y se utilizará el primer elemento de un vector de caracteres de longitud superior a uno, con una advertencia.

valor: valor que se asignará a x.


0
2018-04-04 22:01



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.


-2
2017-10-27 19:06