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,functiony 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_casepara 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.framecomomy.data, pero los puntos también tienen significado en el sistema de métodos S3 de R (print.data.framees "el método print para data frames"), así que el código nuevo los evita. - Sin prefijos húngaros, sin camelCase - verás
camelCaseen 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 <- valuecrea una variable; la comunidad reserva=para los argumentos de funciones.->yassign()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_casey 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.