¿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?
Respuestas:
Utilizar
assign
:fuente
paste0
?Me parece que puede ser mejor con una lista en lugar de utilizar
orca1
,orca2
etc, ... entonces seríaorca[1]
,orca[2]
, ...Por lo general, está haciendo una lista de variables diferenciadas solo por un número porque ese número sería una forma conveniente de acceder a ellas más adelante.
De lo contrario,
assign
es justo lo que quieres.fuente
No hagas marcos de datos. Conserve la lista, nombre sus elementos pero no la adjunte.
La principal razón de esto es que si crea 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 respecta a adjuntar, es una práctica de programación realmente mala en R y puede ocasionar muchos problemas si no se tiene cuidado.
fuente
FAQ dice:
Si usted tiene
tu puedes hacer
para
o
para
Entonces, parece que usa GET cuando desea evaluar una fórmula que usa una variable (como una concatenación) y ASSIGN cuando desea asignar un valor a una variable declarada previamente.
Sintaxis para asignar: asignar (x, valor)
X: un nombre de variable, dado como una cadena de caracteres. No se realiza ninguna coerción y se utilizará el primer elemento de un vector de caracteres de longitud mayor que uno, con una advertencia.
valor: valor que se asignará ax.
fuente
Otra solución complicada es nombrar elementos de la lista y
attach
:fuente
attach
que normalmente estás haciendo la pregunta incorrecta ...¿Y esta opción?
Funciona perfectamente. En el ejemplo que puso, falta la primera línea y luego le da el mensaje de error.
fuente