Menu

Variables y asignación en R: <-, = y assign()

Cómo crear variables en R con la flecha <-, cuándo se requiere = en su lugar, las reglas de nombres y cómo listar y eliminar variables con ls() y rm().

Esta página incluye editores ejecutables: edita, ejecuta y ve el resultado al instante.

Cómo crear una variable en R

Una variable en R es un nombre unido a un valor. Se crea con la flecha de asignación <-: el nombre va antes de la flecha, el valor después.

Tres variables, tres clases distintas de valor, y ninguna declaración de tipos por ninguna parte - R infiere el tipo del propio valor (más sobre eso en tipos de datos). Una vez que una variable existe, la usas en cualquier lugar donde usarías el valor:

La reasignación funciona igual. Una variable cambia sin quejarse a un nuevo valor - incluso a un nuevo tipo - en el momento en que asignas de nuevo:

R no protestó porque una cadena se convirtiera en un número. Esa flexibilidad es cómoda, pero si el significado de una variable cambia a mitad de un script, eso suele ser tu señal para elegir un nombre nuevo.

Por qué R usa <- en lugar de =

Aquí está la pregunta que todo el mundo hace: age = 30 también funciona, entonces ¿por qué todos los libros de R, las guías de estilo y los paquetes usan la flecha?

Porque = en R es dos cosas distintas según dónde aparece. En el nivel superior, asigna. Dentro de una llamada a función, empareja un argumento por nombre - y no crea una variable:

Si probaras mean(values, na.rm <- TRUE) crearías accidentalmente una variable global llamada na.rm y pasarías TRUE por posición - legal, incorrecto y difícil de detectar. La convención que mantiene esto legible es simple:

  • <- siempre significa asignación.
  • = siempre significa "este argumento recibe este valor" dentro de una llamada a una función.

Sigue esa división y cada línea de R que leas te dirá de un vistazo si algo se está creando o se está pasando. Es la regla de estilo más universal del mundo R - RStudio incluso le da a <- su propio atajo de teclado (Alt+-).

Los primos poco usados: ->, = y assign()

R tiene dos formas más de asignar, ambas dignas de reconocer aunque rara vez las escribas.

La flecha invertida -> asigna en la otra dirección - primero el valor, al final el nombre:

De vez en cuando la verás al final de un pipeline largo ("calcula todo esto, luego guárdalo"), pero la mayoría de las guías de estilo dicen que la evites: los lectores escanean el inicio de una línea buscando el nombre que se define.

assign() crea una variable a partir de una cadena, lo que significa que el nombre puede construirse en tiempo de ejecución:

Esto parece ingenioso y es casi siempre la herramienta equivocada - un conjunto de variables numeradas es en realidad un vector o una lista disfrazada. Recurre a assign() solo cuando un nombre genuinamente deba calcularse; su compañera get("score") lee una variable por su nombre en forma de cadena.

Reglas de nombres

R acepta nombres que:

  • Contienen letras, dígitos, puntos (.) y guiones bajos (_).
  • Empiezan con una letra, o con un punto no seguido de un dígito.
  • No son palabras reservadas (if, for, TRUE, NULL, function y unas pocas más).

Así que todos estos son válidos:

Y estos no:

  • 2nd_user - no puede empezar con un dígito.
  • _temp - tampoco puede empezar con guion bajo (a diferencia de Python).
  • user-name - un guion es una resta, no un carácter de nombre.
  • TRUE - palabra reservada.

Los nombres distinguen mayúsculas: total, Total y TOTAL son tres variables sin relación, y R no te avisará cuando una errata haga nacer una nueva.

Listar y eliminar: ls() y rm()

Cada variable que creas aterriza en el espacio de trabajo (el entorno global). ls() lista lo que hay, y rm() elimina cosas:

Dos detalles que vale la pena conocer. Primero, rm(list = ls()) borra el espacio de trabajo entero - práctico al inicio de una sesión exploratoria, destructivo en cualquier otro lugar. Segundo, los nombres que empiezan con un punto (como .cache) quedan ocultos para ls() a menos que llames a ls(all.names = TRUE) - la misma convención que los archivos ocultos en Unix.

Convenciones de nombres: usa snake_case

Más allá de las reglas duras, la comunidad moderna de R (y la guía de estilo del tidyverse) se ha asentado en convenciones:

  • lower_snake_case para variables y funciones: retry_count, fit_model.
  • Los puntos en los nombres son legales pero anticuados: R base está lleno de nombres de la era de data.frame como my.data, pero los puntos también tienen significado en el sistema de métodos S3 de R (print.data.frame es "el método print para data frames"), así que el código nuevo los evita.
  • Sin prefijos húngaros, sin camelCase - verás camelCase en paquetes antiguos, pero snake_case es donde el ecosistema ha aterrizado.
  • R no tiene constantes reales; la convención es nombrar las aspirantes a constantes en mayúsculas (MAX_RETRIES <- 5) y simplemente no reasignarlas.

Elige nombres descriptivos y sé consistente. avg_score cuesta cuatro pulsaciones más que as y le ahorra a cada lector futuro un viaje de vuelta al inicio del script.

Lo que te llevas

  • name <- value crea una variable; la comunidad reserva = para los argumentos de funciones.
  • -> y assign() existen; los leerás más a menudo de lo que deberías escribirlos.
  • Los nombres usan letras, dígitos, puntos y guiones bajos; no pueden empezar con dígito ni guion bajo, y distinguen mayúsculas.
  • ls() muestra el espacio de trabajo, rm() lo limpia.
  • Escribe en snake_case y tu código se verá como el R que todos los demás escriben hoy.

Lo siguiente: qué clases de valores contienen realmente esas variables - numeric, integer, character y logical.

Preguntas frecuentes

¿Cómo se crea una variable en R?

Escribe el nombre, la flecha de asignación <- y el valor: age <- 30. R deduce el tipo a partir del valor - no hay paso de declaración. age = 30 también funciona en el nivel superior, pero la convención de la comunidad es <-.

¿Cuál es la diferencia entre <- y = en R?

En el nivel superior de un script hacen lo mismo. Dentro de una llamada a función no: mean(x, na.rm = TRUE) usa = para emparejar un argumento por nombre, no para crear una variable. Como = juega ambos papeles según el contexto, las guías de estilo de R reservan <- para la asignación y = para los argumentos.

¿Cómo se elimina una variable en R?

rm(x) elimina la variable x del espacio de trabajo. rm(list = ls()) lo elimina todo - útil para empezar de cero, peligroso a mitad de un análisis. ls() lista lo que existe actualmente.

¿Pueden los nombres de variables en R contener puntos?

Sí - my.data es un nombre perfectamente legal, y el código R antiguo usa puntos por todas partes. El estilo moderno prefiere guiones bajos (my_data) porque los puntos también significan algo en el sistema de métodos S3 de R, lo que hace que los nombres con puntos sean ambiguos de leer.

Coddy programming languages illustration

Aprende a programar con Coddy

COMENZAR