Introducción a R

R es un popular lenguaje de programación especialmente útil para análisis estadístico. Este artículo explican algunos conceptos básicos para empezar a usar R.

Uso básico de R

Para usar R se requieren un interprete y un editor. El más popular es R Studio el cuál se puede descargar de forma gratuita desde su página e incluye ambos, un editor y un interprete con una interfaz amigable que además permite navegar entre tus archivos, revisar tu historial de comandos y leer la documentación.

R Studio

En este editor en particular se puede usar el panel console para correr comandos y ver el resultado de forma inmediata, o el panel de edición para escribir un programa completo y correrlo cuando esté listo. Los comandos en este artículo se ejecutarán en el interprete para que todo sea un poco más interactivo.

Uno puede usar el interprete como una calculadora, el siguiente código muestra tal cuál lo que aparece en el editor si introducimos esas instrucciones:

> print("Hola Mundo")
[1] "Hola Mundo"
> (35 - 4)/12
[1] 2.583333
> sample(1:50, 5)
[1] 40 39 29 20 18

El símbolo > no es parte del comando, representa el prompt de R, un indicador de que nuestra computadora está lista para recibir un nuevo comando.

Si ya se ha usado un lenguaje de programación antes R no representa nada nuevo y de hecho es mucho más simple que muchos lenguajes. Si por el contrario ésta es tu primera vez en este tema tal vez sea buen idea buscar algo de información básica sobre programación y algoritmos ya que no cubriré esa clase de contenido.

En términos muy generales uno puede hacer dos clases de cosas en R: operaciones o ejecutar funciones. Las operaciones básicas en R son:

  • + suma
  • - resta
  • * multiplicación
  • / división
  • ^ o ** potenciación
  • %% módulo o residuo
  • %/% división entera

En cuanto a funciones estas tienen la forma funcion(argumento1, argumento2) y hacen algo. La más sencilla es print( ) que como se mostró antes imprime en la consola lo que se pasa como argumento.

Comentarios

Los comentarios dentro del código son lineas de texto que el interprete ignora. Están ahí para hacer más fácil de entender el código si luego hay que modificarlo o se comparte con alguien más.

En R el símbolo # se usa para introducir comentarios. Todo lo que se escriba luego de ese símbolo en una linea será ignorado por el interprete

> # print("Hola") Esto no hace nada
> print("Mundo") # Esto si
[1] "Mundo"

El operador de asignación

En la mayoría de los lenguajes para guardar un valor en una variable se usa el símbolo de igualdad =. En R existe además <-. En muchos casos se pueden intercambiar, pero no hacen exactamente lo mismo.

El operador <- hace asignaciones globales mientras que = se usa en subexpresiones. Veamos un ejemplo, crearé una lista con 3 valores.

> lista <- c(nombre="Geri", numero=55, vivo=TRUE)

> print(lista)
nombre numero   vivo
"Geri"   "55" "TRUE"

> lista['nombre']
nombre
"Geri"

Esta lista contiene 3 elementos a los cuáles se puede acceder mediante su identificador (en algunos lenguajes a estas listas se les llama diccionarios). ¿Qué pasa si uso <- en vez de =?

> lista <- c(nombre <- "Geri", numero <- 55, vivo <- TRUE)

> print(lista)
[1] "Geri" "55"   "TRUE"

> lista['nombre']
[1] NA

> nombre
[1] "Geri"

En vez de usar el nombre para identificar el valor Geri dentro de la lista se creó una variable global.

Convenciones de estilo

Cuando uno escribe código en cualquier lenguaje, sobre todo si se va a compartir ese código con alguien más, es bueno seguir algunas convenciones de estilo. Estas convenciones no son reglas estrictas pero la mayoría de la gente las usa para tener un código homogéneo entre diferentes proyectos y que sea fácil de entender.

Identación

Identación se refiere al espacio que se deja antes de una línea cuando se escribe código que está en un nivel lógico interior respecto a la línea actual (al escribir funciones, condicionales y bucles). En R la identación es de dos espacios, nunca se usan tabulaciones. Excepciones a esta regla son permitidas para hacer más claro código que ocupa varias líneas.

Veamos un ejemplo

# Identación estándar de dos espacios
if (x < 0) {
  y <- -1 * x^2
  print("x is negative")
}


# Identación especial para mantener los argumentos alineados
funcion_especial <- function(a = "primer argumento",
                             b = "segundo argumento",
                             c = "ultimo argumento"){
  print("Esta función no hace nada")
}

Nombrar variables y funciones

Los nombres de variables y funciones deben escribirse en minúsculas, ser concisos y tener algún sentido. Si la variable necesita de dos palabras usa guiones bajos _ para separarlas. A toda costa resiste la tentación de nombrar una variable T o J, aunque en ese momento parezca buena idea.

Espacios en blanco

Se deben usar espacios en blanco al rededor de los operadores binarios (mencionados al inicio de este artículo), siempre se debe poner un espacio delante de una coma y antes de un paréntesis. La única exención al espaciado detrás de un paréntesis es cuando dicho paréntesis es parte de la llamada a una función.

Veamos un par de ejemplos:

# Espacios alrededor de operadores binarios
promedio <- mean(datos$perdidas + datos$ingresos)

# Espacios en parentesis que no son llamadas a una función
if (x < 0) {
  plot(x, y)
}

Llaves

No se deben poner llaves de apertura en una nueva línea, las llaves siempre van en la misma linea del la expresión que delimitan. Por otro lado las llaves de cierre deben ir solas en su propia línea a menos que haya un else enseguida.

if (valor < 0 && existe) {
  print("El valor es negativo")
}

if (y == 0) {
  log(x)
} else {
  y ^ x
}

Distinción entre números y caracteres

Es muy importante hacer la distinción entre cadenas de texto y números. Aunque los tipos numéricos a su vez pueden ser flotantes, enteros o complejos en términos prácticos la distinción peligrosa es entre cadenas de texto y números.

Las cadenas de texto deben escribirse entre comillas simples o dobles. Por ser texto y no números no se pueden hacer operaciones aritméticas con ellas.

> 132 + 15
[1] 147

> '132' + '15'
Error in "132" + "15" : non-numeric argument to binary operator

Aunque este punto parece inocente, en R se trabaja casi siempre con tablas o dataframes y al manipularlas puede cambiar de forma inadvertida el tipo de datos que contienen. Siempre hay que prestar atención a esas comillas al rededor de un número.