You are on page 1of 81

Programacin

en R

Tabla de contenido
Prefacio 0
Introduccin a R 1
Instalacin 1.1
Introduccin a la interface de R 1.2
Primeros pasos con R 2
Introduccin de datos 2.1
Evaluacin 2.2
Objetos en R 2.3
Nmeros 2.4
Atributos 2.5
Creando vectores 2.6
Mezclando objetos 2.7
Coercin explcita 2.8
Matrices 2.9
Listas 2.10
Factores 2.11
Valores indefinidos 2.12
Data frames 2.13
Nombres 2.14
Importar y exportar datos en R 3
Lectura y escritura de datos 3.1
Leyendo archivos con read.table() 3.2
Leyendo grandes conjuntos de datos 3.3
Calculando los requerimientos de memoria 3.4
Uso del paquete readr 3.5
Uso de formato de texto y binario para almacenar datos 4
Uso de dput() y dump() 4.1
Formatos binarios 4.2
Interfaces con el Mundo Exterior 5
Conexiones con archivos 5.1

2
Programacin en R

Lectura de lineas en archivos de texto 5.2


Lectura de conexiones URL 5.3
Troceado de objetos 6
Troceado de un vector 6.1
Troceado de una matriz 6.2
Troceado de listas 6.3
Troceado de elementos anidados de una lista 6.4
Troceado de elemtos multiples de una lista 6.5
Bsqueda parcial 6.6
Eliminacin de valores NA 6.7
Operaciones vectorizadas 7
Operaciones matriciales vectorizadas 7.1
Fecha y hora 8
Fechas en R 8.1
Horas en R 8.2
Operaciones con fechas y horas 8.3
Manipulacin de Data Frames con el paquete dplyr 8.4
Data frames 8.5
El paquete dplyr 8.6
select() 8.7
filter() 8.8
arrange() 8.9
rename() 8.10
mutate() 8.11
group_by() 8.12
%>% 8.13
Estructuras de control 9
if-else 9.1
Iteraciones con for 9.2
Iteraciones anidadas con for 9.3
Iteraciones con while 9.4
repeat 9.5
next, break 9.6
Funciones 10

3
Programacin en R

Funciones en R 10.1
Nuestra primera funci?n 10.2
Correspondencia en los argumentos 10.3
Evaluacin lazy 10.4
El argumento ... 10.5
Argumentos detrs de ... 10.6

4
Programacin en R

Este libro es una introduccin a la programacin en R, es una traduccin y adaptacin del


libro de Roger D. Peng, R Programming for Data Science, el cual utiliza el mismo material
desarrollado para la Especializacin en Data Science de la universidad Johns Hopkins.
xisten copias de este libro en formato pdf, epub y mobi en el siguiente enlace.

Rubn Snchez Sancho

Prefacio 5
Programacin en R

Introduccin a R

Introduccin a R 6
Programacin en R

Introduccin a R

Instalacin

Lo primero que tenemos que hacer es instalar R en nuestra computadora. R dispone de


versiones para la gran mayora de plataformas como por ejemplo Windows, MacOS X y
Linux. En los siguientes enlaces te mostramos como instalar R en _Windows o Mac:

Instalacin de R en Mac
Instalacion de R en Windows

Existe un entorno de desarrollo integrado disponible para R de la compaia RStudio. Es un


estupendo IDE con un editor con correccin sintctica, una vista de objetos R y un gran
numero de caractersticas integradas que facilitan en gran medida las tarea del da a da.
Puedes ver como instalarlo en:

Instalacin de RStudio

Instalacin 7
Programacin en R

El RStudio IDE est disponible en la siguiente pgina web de RStudio.

Instalacin 8
Programacin en R

Introduccin a la interface de R
Una vez instalado R abriremos RStudio para familiarizarnos con el entorno. En el siguiente
video encontraremos como escribir archivos R y como configurar el IDE para que reconozca
nuestro directorio de trabajo.

Escritura de cdigo y configuracin del directorio de trabajo en Mac


Escritura de cdigo y configuracin del directorio de trabajo en Windows

Introduccin a la interface de R 9
Programacin en R

Primeros pasos con R

Primeros pasos con R 10


Programacin en R

Primeros pasos con R

Introduccin de datos
En el prompt de R escribiremos las expresiones. El smbolo <- s el operador de
asignacin.

> x <- 1
> print(x)

[1] 1

> x

[1] 1

> msg <- "hello"


> print(msg)

[1] "hello"

La gramtica del lenguaje determina si una expresin es completa o no.Por ejemplo:

x <- ## Expresin incompleta

El carcter # indica que es un comentario. Cualquier cosa escrita a la derecha del mismo
ser ignorado. Este s el nico tipo de comentario en R. A diferncia de otros lenguajes R
no soporta los comentarios multilnia y por bloques.

Introduccin de datos 11
Programacin en R

Evaluacin
Cuando un expresin correcta es introducida en la consola, esta es evaluada y el resultado
de la expresin es devuelto. El resultado puede ser auto-printed:

> x <- 5 ## No se imprime en pantalla


> x ## por auto-printing se imprime en pantalla

[1] 5

> print(x) ## impresin explcita

[1] 5

En [1] se muestra que x es un vector y que su primer elemento es 5.

Tpicamente con un trabajo interactivo, nosotros no imprimeros los objetos de forma


explcita ya que es mucho ms cmodo slo escribir el nombre del objeto y presionar la
tecla Enter. Sin embargo, cundo escribamos scripts, funciones o programas muchos ms
largos, nos veremos con la necesidad de imprimir objetos y es entonce cundo utilizaremos
el modo explcito, ya que el modo mplicito no trabaja en esas circunstncias.

Cundo un vector R es mostrado en la consola obsrvese que el ndice del vector es


mostrado en []. Por ejemplo:

> x <- 10:30


> x

[1] 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30

Los nmeros entre corchetes no forman parte del vector en s mismo, sino que se trata
nicamente de informacin para la impresin por pantalla.

En R es de vital importncia entender la diferncia que existe en el objeto R y la manera en


que estos objetos son mostrados en la consola. Normalmente, la informacin en la consola
puede tener informacin adicional para hacerla ms agradable al usuario.

Nota: El operador : es utilizado para crear secuencias de enteros.

Evaluacin 12
Programacin en R

Evaluacin 13
Programacin en R

Objetos en R
R tiene cinco tipos bsicos de objetos:

character
numeric (nmero real)
integer
complex
logical (True/False)

El objeto ms bsico en R es el vector. Podemos crear vectores vacos con la funcin


vector(). Existe nicamente slo una regla sobre los vectores en R, que es que un vector
slo puede contener objetos de la misma clase.

Pero obviamente, como en cualquier buena regla, existe una excepcin, esta s con los
objetos de la clase lista. Una lista es representada como un vector pero puede contener
objetos de diferentes clases. Es por esto, que nosotros utilizaremos con mayor frecuncia
este tipo de objeto.

Objetos en R 14
Programacin en R

Nmeros
Los nmeros en R son tratados como objetos de tipo numeric (nmeros reales de doble
precisin). Esto quiere decir que si vemos en R nmeros com "1" or "2" nos puede llevar a
pensar que estamos tratando con nmeros enteros pero, en realidad detrs de bastidores R
los representa como numeric (algo como "1.00" or "2.00"). Esto no s importante en la
mayora de los casos... excepto cuando s lo s.

Si necesitamos trabajar con enteros debemos especificarlo explcitamente con el sufijo L.


Por lo tanto, introduciendo en R 1 te devuelve un objeto de tipo numeric; introduciendo 1L
nos devolver un objeto de tipo entero.

Existe un tipo especial de nmero Inf que representa infinito. Esto nos permite representar
entidades como 1/0. As pues, Inf puede ser utilizado en clculos de tipo: 1 / Inf que es igual
a 0.

El valor NaN representa un valor indefinido ("not a number"); por ejemplo 0 / 0; NaN puede
ser considerado como un valor no definido (lo veremos en prximos captulos).

Nmeros 15
Programacin en R

Atributos
Los objetos en R pueden tener atributos, estos sn como metadatos para el objeto. Estos
metadatos pueden ser muy tiles ya que nos proporcionan informacin del objeto. Por
ejemplo, los nombres de columna en un data frame nos proporcionan informacin de lo que
contiene cada columna. Algunos ejemplos de atributos en objetos R son:

names, dimnames
dimensions (en matrices, arrays)
class (e.g. integer, numeric)
length
otros atributos/metadatos definidos por el usuario

A los atributos de un objeto si los hay, se puede acceder mediante la funcin attributes(). No
todos los objetos contienen atributos, en este caso la funcin attributes() devolver NULL.

Atributos 16
Programacin en R

Creando vectores
La funcin c() puede ser usada para crear objetos.

> x <- c(0.5, 0.6) ## numeric


> x <- c(TRUE, FALSE) ## logical
> x <- c(T, F) ##logical
> x <- c("a", "b", "c") ##character
> x <- 9:29 ##integer
> x <- c(1+0i, 2+4i) ##complex

Obsrvese en el ejemplo anterior que T y F s lo mismo que TRUE y FALSE


respectivamente. Sin embargo, deberamos utilizar los valores TRUE y FALSE para indicar
los valores lgicos, es considerado una buena prctica.

Tambin podemos utilizar la funcin vector() para inicializar vectores.

> x <- vector("numeric", length = 10)


> x

[1] 0 0 0 0 0 0 0 0 0 0

Creando vectores 17
Programacin en R

Mezclando objetos
Existen ocasiones en las que nos encontramos diferentes clases de objetos R mezclados.
Algunas veces esto sucede por accidente pero tambin puede darse el caso de que haya
sido intencionadamente. Obsrvese detenidamente el siguiente cdigo:

> y <- c(1.7, "a") ## character


> y

[1] "1.7" "a"

> class(y)

[1] "character"

> y <- c(TRUE, 2) ## numeric


> print(y)

[1] 1 2

> class(y)

[1] "numeric"

> y <- c("a", TRUE) ## Character


> print(y)

[1] "a" "TRUE"

> class(y)

[1] "character"

Mezclando objetos 18
Programacin en R

En todos los casos anteriores hemos mezclados objetos de diferentes clases en un vector.
No obstante, recordemos que la nica regla en los vectores es que no podemos mezclas
objetos de diferentes clases. Cuando esto sucede, se pone en marcha la coercio para que
cada elemento del vector sen de la misma clase.

En el ejemplo presentado hemos visto el efecto conocido como coercion implcita. Con este
mecanismo R intenta encontrar un manera de representar todos los objetos de una forma
razonable.

Mezclando objetos 19
Programacin en R

Coercin explcita
El mecanismo de coercion puede ser hecho de forma explcita con la funcin as.* si es
posible.

> x <- 0:6


> class(x)

[1] "integer"

> as.numeric(x)

[1] 0 1 2 3 4 5 6

> as.logical(x)

[1] FALSE TRUE TRUE TRUE TRUE TRUE TRUE

> as.character(x)

[1] "0" "1" "2" "3" "4" "5" "6"

En ocasiones esto no es posible y R nos devolver un objeto NAs.

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


> as.numeric(x)

Warning: NAs introduced by coercion

[1] NA NA NA

> as.logical(x)

Coercin explcita 20
Programacin en R

[1] NA NA NA

> as.complex(x)

Warning: NAs introduced by coercion

[1] NA NA NA

Cundo esto suceda R nos avisar con un mensaje de tipo warning.

Coercin explcita 21
Programacin en R

Matrices
Las matrices son vectores con un atributo denominado dimension. Este atributo que nos
proporciona la dimensin de la matriz es en s mismo un vector de tipo entero de longitud 2
(numero de filas, numero de columnas).

> m <- matrix(nrow = 2, ncol = 3)


> m

[,1] [,2] [,3]


[1,] NA NA NA
[2,] NA NA NA

> dim(m)

[1] 2 3

> attributes(m)

$dim
[1] 2 3

Las matrices se contruyen _"column-wise", esto quiere decir que lo hacen verticalmente, es
decir empezando de la esquina superior izquierda y descendiendo hacia abajo por las
columnas.

> m <- matrix(1:6, nrow = 2, ncol = 3)


> m

[,1] [,2] [,3]


[1,] 1 3 5
[2,] 2 4 6

Tambin podemos crear matrices a partir de vectores pasndole el atributo dimension.

Matrices 22
Programacin en R

> m <- 1:10


> m

[1] 1 2 3 4 5 6 7 8 9 10

> dim(m) <- c(2, 5)


> m

[,1] [,2] [,3] [,4] [,5]


[1,] 1 3 5 7 9
[2,] 2 4 6 8 10

Las matrices pueden ser creadas rellenando los elementos por columnas ("column-binding")
o por filas ("row-binding") con las funciones cbind() y rbind() respectivamente.

> x <- 1:3


> y <- 10:12
> cbind(x, y)

x y
[1,] 1 10
[2,] 2 11
[3,] 3 12

> rbind(x,y)

[,1] [,2] [,3]


x 1 2 3
y 10 11 12

Matrices 23
Programacin en R

Listas
Las listas son un tipo especial de vector que pueden contener objetos de diferentes clases.
Las listas son una estructura de datos muy importante y ampliamente utilizada, es por eso
que tendramos que estudiarlas y conocerlas profundamente. Las listas junto con un
conjunto de funciones que trataremos ms adelante constituyen una herramienta poderosa
para el desarrollo de nuestro trabajo.

Las listas pueden ser creadas explcitamente con la funcin list(), la cual puede tomar un
nmero arbitrario de argumentos.

> x <- list(1, "a", TRUE, 1 + 4i)


> x

[[1]]
[1] 1

[[2]]
[1] "a"

[[3]]
[1] TRUE

[[4]]
[1] 1+4i

Tambin podemos crear una lista vaca con una longitud preestablecida mediante la funcin
vector().

> x <- vector("list", length = 5)


> x

Listas 24
Programacin en R

[[1]]
NULL

[[2]]
NULL

[[3]]
NULL

[[4]]
NULL

[[5]]
NULL

Listas 25
Programacin en R

Factores
Los factores son utilizados para representar categoras y pueden estar ordenadas o
desordenadas. Podemos pensar en los factores como un vector de enteros en el que cada
entero representa una etiqueta. Los factores son importantes en modelos estadsticos y se
utilizan especialmente para modelar junto a funciones como lm() y glm().

El uso de factores con etquetas es mejor que con enteros puesto que los factores sn auto-
descriptivos. Por ejemplo, si trabajamos con una variable que tiene los valores "Hombre" y
"Mujer" es mejor que si lo hacemos con los valores 1 y 2.

Los objetos factor pueden ser creados con la funcin factor().

> x <- factor(c("yes", "yes", "no", "yes", "no"))


> x

[1] yes yes no yes no


Levels: no yes

> table(x)

x
no yes
2 3

> unclass(x) ##vemos la representacin interna del vector

[1] 2 2 1 2 1
attr(,"levels")
[1] "no" "yes"

> attr(x,"levels")

[1] "no" "yes"

Factores 26
Programacin en R

A menudo los factores sern creados por nosotros cuando importemos un conjunto de datos
con funciones como read.table(). Este tipo de funciones crean factores por defecto cuando
encuentran datos de tipo carcter o cadenas de carcteres ("strings").

El orden de los niveles de un factor puede ser establecido utilizando el argumento levels de
la funcin factor(). Esto puede ser importan en modelos liniales puesto que el primer nivel
es utilizado como nivel base.

> x <- factor(c("hombre", "hombre", "mujer", "hombre", "mujer"))


> x ## los niveles son establecidos de forma alfabtica

[1] hombre hombre mujer hombre mujer


Levels: hombre mujer

> x <- factor(c("hombre", "hombre", "mujer", "hombre", "mujer"),levels = c("mujer", "hombre"


> x

[1] hombre hombre mujer hombre mujer


Levels: mujer hombre

Factores 27
Programacin en R

Valores indefinidos
Los valores indefinidos son indicados en R por NA o NaN para cualquier operacin
indefinida matematicamente.

is.na() se utiliza para comprobar si los objetos son NA


is.nan() se utiliza para comprobar si los objetos son NaN
NA pertenecen a una clase, por lo tanto nos podemos encontrar con integer NA,
character NA, etc.
Un valor NaN es tambin un NA pero lo contrario es falso.

> ## Crea un vector con valore Na


> x <- c(1, 2, NA, 10, 3)
> ##Devuelve un vector lgico indicando que elementos son NA
> is.na(x)

[1] FALSE FALSE TRUE FALSE FALSE

> ##Devuelve un vector lgico indicando que elemetos son NaN


> is.nan(x)

[1] FALSE FALSE FALSE FALSE FALSE

> ## Crea un vector con valores Na y NaN


> x <- c(1, 2, NA, NaN, 3)
> ##Devuelve un vector lgico indicando que elementos son NA
> is.na(x)

[1] FALSE FALSE TRUE TRUE FALSE

> ##Devuelve un vector lgico indicando que elemetos son NaN


> is.nan(x)

[1] FALSE FALSE FALSE TRUE FALSE

Valores indefinidos 28
Programacin en R

Data frames
Los data frames son utilizados en R para almacenar datos de tipo tabla. Es un tipo de objeto
muy importante en R y utilizados ampliamente en modelado estadstico. El paquete dplyr de
Hadley Wickham posee un conjunto optimizado de funciones diseadas para trabajar
eficientemente con data frames.

Los data frames son representados como un tipo especial de lista donde cada elemento de
la lista tiene que tener la misma longitud. Podemos considerar cada elemento de la lista
como una columna y la longitud de cada elemento de la lista como el nmero de filas.

A diferencia de las matrices, los data frames pueden almacenar diferentes clases de objetos
en cada columna. Recordemos que los matrices deban tener cada elemento de la misma
clase (e.g. todos enteros o todos numericos).

Adems del nombre de las columnas, que nos indica el nombre de las variables, los data
frames tienen un atributo especial denominado row.names que nos indica la informacin de
cada fila en el data frame.

Los data frames normalmente son creados leyendo desde un conjunto de datos con las
funcions read.table() o read.csv(). Sin embargo, data frames pueden ser creados
explcitamente con la funcin data.frame() o pueden ser "coerced" desde otro tipo de
objetos como las listas.

Los data frames pueden ser convertidos a matrices con la funcin data.matrix().

> x <- data.frame(foo = 1:4 , bar = c(T,T,F,F))


> x

foo bar
1 1 TRUE
2 2 TRUE
3 3 FALSE
4 4 FALSE

> nrow(x)

[1] 4

Data frames 29
Programacin en R

> ncol(x)

[1] 2

Data frames 30
Programacin en R

Nombres
Los objetos en R pueden tener nombres, lo que es til para la escritura de cdigo legible y
objetos auto-descriptivos. A continuacin se muestra un ejemplo de asignacin de nombres
a un vector de enteros.

> x <- 1:3


> names(x)

NULL

> names(x) <- c("Espaa", "Honduras", "El Salvador")


> x

Espaa Honduras El Salvador


1 2 3

> names(x)

[1] "Espaa" "Honduras" "El Salvador"

Nombres 31
Programacin en R

Importar y exportar datos en R

Importar y exportar datos en R 32


Programacin en R

Lectura y escritura de datos

Lectura y escritura de datos 33


Programacin en R

Leyendo archivos con read.table()

Leyendo archivos con read.table() 34


Programacin en R

Leyendo grandes conjuntos de datos

Leyendo grandes conjuntos de datos 35


Programacin en R

Calculando los requerimientos de


memoria

Calculando los requerimientos de memoria 36


Programacin en R

Uso del paquete readr

Uso del paquete readr 37


Programacin en R

Uso de formato de texto y binario para


almacenar datos

Uso de formato de texto y binario para almacenar datos 38


Programacin en R

Uso de dput() y dump()

Uso de dput() y dump() 39


Programacin en R

Formatos binarios

Formatos binarios 40
Programacin en R

Interfaces con el Mundo Exterior

Interfaces con el Mundo Exterior 41


Programacin en R

Conexiones con archivos

Conexiones con archivos 42


Programacin en R

Lectura de lineas en archivos de texto

Lectura de lineas en archivos de texto 43


Programacin en R

Lectura de conexiones URL

Lectura de conexiones URL 44


Programacin en R

Troceado de objetos

Troceado de objetos 45
Programacin en R

Troceado de un vector

Troceado de un vector 46
Programacin en R

Troceado de una matriz

Troceado de una matriz 47


Programacin en R

Troceado de elementos anidados de una


lista

Troceado de elementos anidados de una lista 48


Programacin en R

Troceado de elemtos multiples de una lista

Troceado de elemtos multiples de una lista 49


Programacin en R

Bsqueda parcial

Bsqueda parcial 50
Programacin en R

Eliminacin de valores NA

Eliminacin de valores NA 51
Programacin en R

Operaciones vectorizadas

Operaciones vectorizadas 52
Programacin en R

Operaciones matriciales vectorizadas

Operaciones matriciales vectorizadas 53


Programacin en R

Fecha y hora

Fecha y hora 54
Programacin en R

Fechas en R

Fechas en R 55
Programacin en R

Horas en R

Horas en R 56
Programacin en R

Operaciones con fechas y horas

Operaciones con fechas y horas 57


Programacin en R

Manipulacin de Data Frames con el


paquete dplyr

Manipulacin de Data Frames con el paquete dplyr 58


Programacin en R

Data frames

Data frames 59
Programacin en R

El paquete dplyr

El paquete dplyr 60
Programacin en R

select()

select() 61
Programacin en R

filter()

filter() 62
Programacin en R

arrange()

arrange() 63
Programacin en R

rename()

rename() 64
Programacin en R

mutate()

mutate() 65
Programacin en R

group_by()

group_by() 66
Programacin en R

%>%

%>% 67
Programacin en R

Estructuras de control

Estructuras de control 68
Programacin en R

if-else

if-else 69
Programacin en R

Iteraciones con for

Iteraciones con for 70


Programacin en R

Iteraciones anidadas con for

Iteraciones anidadas con for 71


Programacin en R

Iteraciones con while

Iteraciones con while 72


Programacin en R

repeat

repeat 73
Programacin en R

next, break

next, break 74
Programacin en R

Funciones

Funciones 75
Programacin en R

Funciones en R

Funciones en R 76
Programacin en R

Nuestra primera funci?n

Nuestra primera funci?n 77


Programacin en R

Correspondencia en los argumentos

Correspondencia en los argumentos 78


Programacin en R

Evaluacin lazy

Evaluacin lazy 79
Programacin en R

El argumento ...

El argumento ... 80
Programacin en R

Argumentos detrs de ...

Argumentos detrs de ... 81