En este tutorial buscamos dar una introducción a R como lenguaje. Como nos enfocamos en el uso de R como herramienta para el trabajo con datos, sólo presentaremos lo indispensable para llegar a este objetivo. Como complemento, iremos dejando enlaces a recursos para profundizar algunos conceptos.

Lo más básico de la linea de comandos

Operaciones numéricas

Seguramente este es el uso menos habitual de R pero, como cualquier lenguaje, lo podemos usar de calculadora. Lo importante en este momento es reconocer como interactuamos: ingresamos un comando y el sistema responde.

2+2
## [1] 4

Podemos usar R para operaciones un poco más complejas:

(5 * 8) + 32 + 2^3
## [1] 80
sqrt(2)
## [1] 1.414214
log(10)
## [1] 2.302585
log10(10)
## [1] 1

Variables

Pasemos a crear ahora nuestra primera variable. Una variable consiste en la asignación de un nombre a un espacio en memoria para poder guardar ahí un dato y tenerlo disponible para utilizarlo posteriormente. En otras palabras, es una caja donde guardaremos un dato.

A continuación, crearemos una variable llamada a y le guardaremos el número 2: Esto se realiza en una sola instrucción, mediante el operador de asignación " <- " .

a <- 2

Si bien " <- " es clásico de R, también es válido usar " = “.

a = 2

Ahora, ya tenemos la variable a, podemos operar con ella:

a + a
## [1] 4
3*a
## [1] 6
a <- 1 - a

Prestemos atención a esta última instrucción, ¿qué ocurrió? ¿Qué valor se encuentra ahora en la variable a? Para mostrar en pantalla el contenido de una variable, se utiliza el comando print.

print(a)
## [1] -1

Casi nos olvidamos de lo básico de cualquier lenguaje, el programa “hello world”:

b <- "hello world"
b
## [1] "hello world"
print(b)
## [1] "hello world"

Tipos de Datos

Los datos guardados en las variables pueden ser de distintos [tipos] (https://es.wikipedia.org/wiki/Tipo_de_dato). En lo que nos compete, podemos pensar que el tipo de dato de una variable es la descripción del dato que allí está guardado. Por ejemplo, la variable a tiene dentro un número (escalar) y b, en cambio, una cadena de caracteres (palabras). No será muy importante, pero podemos ver el tipo mediante la función typeof:

typeof(a)
## [1] "double"
typeof(b)
## [1] "character"

Esencialmente, los tipos de datos de las variables nos permite saber (a nosotros y a lenguaje) qué operaciones se pueden hacer con y entre ellas. Por ejemplo, si sumamos las variables a y b que creamos anteriormente, obtenemos:

a + b
Error in b + c : non-numeric argument to binary operator

Funciones

R no es un lenguaje puramente funcional, pero mucho de lo que hacemos, lo hacemos a través de funciones. Sin prestar mucha atención, ya hemos hecho uso de funciones en R. El primero fue con print, y ahora con typeof. Anteriormente ya habíamos calculado la raíz cuadrada y logaritmos también mediante las funciones sqrt y log.

La manera de utilizar una función es invocándola con su nombre, seguida de En otras palabras, si tenemos una función f y la queremos aplicar a una variable x, se escribe como en la escuela:

f(x)

Las funciones que usamos hasta ahora requieren un solo argumento. Algunas no tienen ninguno, otras tienen varios. Es común que las funciones tengan argumentos que ya traen algún valor por defecto, que se pueden modificar.

Vectores

Los vectores son una manera útil de organizar datos del mismo tipo. Consisten sencillamente en una secuencia de elementos. Por ejemplo (1,2,3) y (4,6,12,-1) son vectores.

Vectores Numéricos

Para crear un vector, lo más usual es utilizar la función c. Lo podemos recordar como la función de concatenación. Por ejemplo, para obtener el vector (1,3,5,7,9), escribimos:

c(1,3,5,7,9)
## [1] 1 3 5 7 9

Los vectores, como cualquier otro tipo de dato, pueden ser guardados en variables. Por ejemplo:

x <- c(1,3,5,7,9)
y <- c(2,4,6,8,10)

Una de las ventajas de utilizar vectores es que se pueden realizar operaciones con ellos, como nos enseñaron en la escuela:

x + y
## [1]  3  7 11 15 19
x * 3
## [1]  3  9 15 21 27

Otros ejemplos son:

x + 2
## [1]  3  5  7  9 11
x * y
## [1]  2 12 30 56 90

¿Qué pasó en estos casos? La multiplicación es elemento por elemento. ¿Y la suma?

Vectores de caracteres:

También podemos construir vectores de caracteres:

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

En caso de que te lo estuvieras preguntando: no hay problema, pueden convivir un vector c con la función c.

Antes habiamos creado una variable b que contenía la cadena de caracteres “hello world”. Las variables b y c están relacionadas, pero no son construcciones equivalentes. La variable b tiene un elemento que es una cadena de caracteres. En cambio, c es un vector. De esta manera, este comando es válido:

d <- c("hello", "world")

Acabamos de crear un vector formado por dos cadenas de caracteres.

Otro tipo de dato con el que nos vamos a encontrar unas cuantas veces son los factores. Hay que prestar atención porque al principio pueden confundirnos con las cadenas de caracteres. Por ejemplo,

nseo <-  factor(c("norte", "sur", "este", "oeste"))
nseo
## [1] norte sur   este  oeste
## Levels: este norte oeste sur

Se usan para indicar los niveles de variables categóricas, por ejemplo para análisis estadísticos. Volveremos a esto.

Matrices (optativo)

Las matrices son estructuras compuestas por datos del mismo tipo, aunque no necesariamente numéricos. Hay más de una forma de crearlas. Una manera bastante cómoda es teniendo los datos en un vector e indicando aparte el número de filas y/o columnas que necesitamos y si la matriz se llena por filas o por columnas.

Como siempre, hay una función para hacer esto:

mis.datos <- c(1,2,3,4,5,6,7,8,9,10,11,12)
mi.matriz <- matrix(mis.datos, nrow=3, byrow = T)
mi.matriz
##      [,1] [,2] [,3] [,4]
## [1,]    1    2    3    4
## [2,]    5    6    7    8
## [3,]    9   10   11   12

Podemos probar y cambiar algunos de los parámetros de la función. Por ejemplo:

matrix(mis.datos, nrow=2, byrow = T)
##      [,1] [,2] [,3] [,4] [,5] [,6]
## [1,]    1    2    3    4    5    6
## [2,]    7    8    9   10   11   12
matrix(mis.datos, ncol=3, byrow = F)
##      [,1] [,2] [,3]
## [1,]    1    5    9
## [2,]    2    6   10
## [3,]    3    7   11
## [4,]    4    8   12

Repaso hasta este momento

En este curso vamos a enfocarnos en el uso de R como lenguaje para el análisis de datos.

En este punto deberías:

  • Poder ejecutar comandos sencillos desde la linea de comando de R.
  • Poder asignar un valor a una variable
  • Aunque no sepas qué hace, reconocer una función al verla.
  • Crear vectores con la función c.
  • Poder construir vectores de caráracteres o de cadenas de carácteres.
  • Construir vectores numéricos y realizar operaciones matemáticas sobre ellos.

Esto es lo que necesitamos para continuar. Si hay otras cosas que no entiendas, no te preocupes. No son críticas para el próximo paso, y seguramente volveremos a ellas.

Algunas funciones que deberíamos guardar para tener a mano

  • c : construcción de vectores
  • typeof : consulta de tipo de dato
  • matrix : construcción de matrices

Operaciones con vectores

R es un lenguaje que opera principalmente sobre vectores y estructuras de datos relacionados con ellos.

Por este motivo, para manejar bien R hay que familiarizarse con su uso. Hay muchas funciones para crear, modificar y operar con vectores. Vamos a ver algunas.

Importante: los vectores en R se comienzan a numerar desde uno.

Secuencias

Muchas veces necesitamos vectores que son secuencias de números. Hasta ahora los creamos ingresando los elementos uno por uno, pero hay maneras más fáciles. Por ejemplo:

vec1 <- 1:20
vec2 <- 20:1

Para secuencias más complejas tenemos dos funciones que nos van a ayudar seq y rep.

seq(2,20,2)
##  [1]  2  4  6  8 10 12 14 16 18 20
rep(1,10)
##  [1] 1 1 1 1 1 1 1 1 1 1

En el primer caso, ejecutamos seq para generar una secuencia que va desde 2 hasta 20 con incrementos de 2. Y en el segundo repetimos el número 1 diez veces.

Los dos comandos son bastante flexibles, y para aprenderlos nos va a ayudar indicar explicitamente sus argumentos:

seq(from=2, to=20, by=2)
##  [1]  2  4  6  8 10 12 14 16 18 20
rep(x=1, times=10)
##  [1] 1 1 1 1 1 1 1 1 1 1

Leyendo los datos de un vector: Indexado

¿Cómo recupero el primer elemento de un vector? ¿Cómo averiguo el largo de un vector? ¿Puedo copiar parte de un vector en otro?

Para recuperar el valor guardado en un vector en una posición determinada, escribimos el nombbre del vector seguido de la posición entre corchetes. Por ejemplo, volviendo a nuestros vectores x e y, para recuperar el valor de la primera posición de x y la tercera de y escribimos:

x[1]
## [1] 1
y[3]
## [1] 6

A veces es útil recuperar una porción del vector original. Podemos utilizar entonces una secuencia construida con “:” o cualquier otro vector dentro de los “[]”. Por ejemplo:

vec1 <- 1:20
vec1[1]
## [1] 1
vec1[10:20]
##  [1] 10 11 12 13 14 15 16 17 18 19 20
length(vec1)
## [1] 20
# el vector sin el primer elemento
vec1[-1]
##  [1]  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20
# el vector sin el primer y tercer elemento
vec1[-c(1,3)]
##  [1]  2  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20
# copiamos los elementos 3 al 7 del vector a uno nuevo:
vec2 <- vec1[3:7]

Instalar Paquetes

Durante el curso haremos uso de algunas funcionalidades que no están disponibles en R por defecto sino que deben instalarse. En concreto, necesitaremos dos paquetes, que se instalan mediante install.packages:

install.packages("caret")
install.packages("dplyr")

Ayuda en R

Para buscar ayuda de una función, podemos buscarla por nombre:

# información general
help(rep)

# cualquier información sobre rep
??rep

# Solo la parte de ejemplos de la ayuda
example(rep)

También podemos llamar al sistema de ayuda de R:

help.start

Hay más opciones. Una es revisar preguntas anteriores, o hacer las nuestras, en stackoverflow o en las listas de mail del proyecto R:

http://stackoverflow.com http://www.r-project.org/mail.html

También hay un archivo con todas las preguntas y respuestas de la lista de R en http://r.789695.n4.nabble.com/R-help-f789696.html.

Antes de hacer preguntas en los foros, conviene revisar que no estén hechas.

En el blog r-bloggers se pueden leer notas que se recopilan de diferentes blogs: http://www.r-bloggers.com/

Repaso hasta este momento

Al haber llegado a este punto deberías saber cómo:

  • Construir secuencias
  • Extraer partes de un vector manipulando su indice.
  • Buscar ayuda en R

Algunas funciones que deberíamos guardar para tener a mano

  • cbind : combinar vectores en forma vertical
  • rbind : combinar vectores en forma horizontal
  • seq : construcción de secuencias
  • rep : secuencias con elementos repetitivos
  • help, ??tema, help.start : ayuda en R