Está en la página 1de 16

Gua de Clase:

Introduccion al R
Luis A. Chacon Montalvan1,2

Resumen:
R es un sofisticado software para el analisis de datos con fuerte soporte estadstico. Es un software libre y contiene una
gran cantidad de paquete para distintas areas de interes. En esta primera clase mostramos la introduccion al Software
R cubriendo desde su intalacion hasta la descripcion de su forma de trabajar mediante el uso de la interfaz grafica
RStudio. Ademas, se describe los objetos (vectores, matrices, dataframes y listas), se muestran algunas operaciones
basicas, la importacion y exportacion de datos, los bucles principales y la creacion de funciones.
1 Consultor estadstico, Instituto de Planificacion y Estudios Estadsticos (IPLE)
2 Est. de Estadstica, Universidad Nacional Mayor de San Marcos

1. Introduccion
R es un lenguaje de programacion y un entorno libre para la elaboracion de analisis y graficos estadsticos. Puede
compilar y ser ejecutado en diferentes plataformas UNIX, Windows y MacOS. Por software libre, segun la Fundacion de
Software Libre (http://www.fsf.org), nos referimos a:

La libertad de ejecutar el programa para cualquier proposito u objetivo.


La libertad de estudiar como funciona el programa y adecuarlo a nuestras necesidades.
Tener acceso al codigo es una condicion previa.

La libertad de redistribuir copias y poder ayudar a los colegas.


La libertad de mejorar el programa y compartir las mejoras al publico beneficiando a toda la comunidad.
Tener acceso al codigo es una condicion previa.

Fue creado en Nueva Zelanda en el ano 1991 por dos catedraticos, Ross Ihaka y Robert Gentleman, como iniciativa
de querer proporcionar una mejor plataforma estadstica a los alumnos. La funcionalidad de R esta dividido en una serie
de paquetes. Entre estos, el paquete principal es el llamado base, el cual permite ejecutar R y contiene las funciones
mas fundamentales. Actualmente, gracias al esfuerzo de toda la comunidad de usuarios, R posee mas de 4000 paquetes.
La ultima version de R fue lanzada recientemente, el 21/06/2016, que es R.3.3.1 (Bug in your hair).

RStudio es una potente, amigable y libre interface de R para el usuario. Cabe resaltar que es necesario tener una
version instalada de R para poder utilizar RStudio.

1
Introduccion al R

2. Instalacion del R y RStudio


Instalando R
Paso 1 Ir a la pagina oficial de R (http://cran.r-project.org/) y seleccionar el sistema operativo de su PC.

Paso 2 Seleccionar Instalar R por primera vez.

Paso 3 Seleccionar Descargar R 3.3.1 para Windows.

Paso 4 Ejecutar el archivo descargado R-3.3.1-win.exe.

Instalando RStudio
Paso 1 Ir a la pagina oficial de RStudio (http://www.rstudio.com/) y seleccionar la primera opcion.

Paso 2 Seleccionar RStudio Desktop.

Paso 3 Seleccionar Descargar RStudio Desktop.

Paso 4 En la nueva ventana, seleccionar RStudio 0.99.902 - Windows Vista/7/8/10.

Paso 5 Ejecutar el archivo descargado RStudio-0.99.902.exe.

3. Interfaz del RStudio


Existen tres paneles importantes en la interfaz de RStudio como se muestra en la imagen.
1. La consola donde se ejecuta el codigo.
2. La salida donde se muestran los resultados graficos.
3. El editor donde se escribe comandos R mas complejos.

Ademas, se recomienda utilizar los siguientes cuatro metodos abreviados en el RStudio para ahorrar tiempo.

Atajos Importantes:
Ctrl + Enter: Enva la lnea actual (o la seleccion actual) desde el editor a la consola y lo ejecuta. Para
usuarios Mac, utilizar Cmd + Enter.

Tab: Sugiere posibles terminaciones para el texto que se ha escrito.


Ctrl + : En la consola, busca todos los comandos que se ha escrito anteriormente. Para usuarios Mac,
utilizar Cmd + .
Snippet: En el editor, macros de texto que se utilizan para insertar rapidamente fragmentos comunes de
codigo.

m http://iple.com.pe 2
Introduccion al R

getwd() y setwd()
R siempre esta referido a un directorio de trabajo de la computadora. Para saber cual es dicho directorio se debe ejecutar
la funcion getwd(), la cual no requiere ningun argumento.

getwd()

## [1] "D:/UNMSM/PROYECTOS R/Multivariado"

Si se desea cambiar de directorio, se debe utilizar la funcion setwd() especificando la ubicacion.

setwd("D:/UNMSM")

getwd()

## [1] "D:/UNMSM"

Trabajando con Proyectos


Muchas veces resulta mas sencillo y ordenado trabajar con proyectos en RStudio, donde cada uno posee su propio
directorio, workspace, scripts e historial. Para crear un nueveo proyecto, se debe hacer click en File - New Project ,
luego elegir el nombre y ubicacion.

Instalacion de Paquetes
Existen tres maneras principales de instalar un paquete en R.

1. Instalacion desde el CRAN: Instalarlo directamente del repositorio.


Desde el RStudio, Tools - Install Packages
Desde la consola, install.packages("Name of the package")
2. Instalacion desde la Fuente: Primero se debe de descargar el paquete y luego cargarlo al R.
3. Instalacion desde una repositorio control como Github o Bitbucket:
Para mayor detalles, revisar https://github.com/hadley/devtools.

Documentacion
La documentacion es un aspecto muy importante de todos los paquetes, ya que permite al usuario conocer como funciona
el paquete y sus funciones. R proporciona informacion util sobre el uso de las funciones incluidas en los diferentes paquetes
a traves de ciertos comandos de ayuda.

# Ayuda sobre la funcion lm


?lm
help("lm")
help(lm)

Ademas, existe una lista grande de documentacion sobre R en la pagina oficial del software (http://cran.r-project.org/).

Por otro lado, si se tienen consultas mas especficas sobre la parte de programacion, se puede recurrir a la pagina web
Stack Overflow (http://stackoverflow.com). En cambio, si las dudas van mas enfocadas al analisis de datos, minera
de datos, machine learning, visualizacion o ciencia de datos, se recomienda recurrir a la pagina web Cross Validated
(http://stats.stackexchange.com).

m http://iple.com.pe 3
Introduccion al R

4. Tipos de Datos ## [1] "logical"


R tiene 5 clases basicas de datos: entidad<-"Privada" #character
Numeric (Numeros reales) entidad

Integer ## [1] "Privada"


Complex class(entidad)
Logical (Verdadero/Falso)
## [1] "character"
Character (caracteres, palabras)
El caracter # indica comentario. Todo lo que se encuentre
Toda la funcionalidad de R es en base a objetos, los cuales
a su derecha es ignorado.
pueden guardar informacion y ejecutar funciones sobre los
datos. Un aspecto importante de los objetos, a parte de la
informacion que contienen, es el nombre que se les otorga.
Es recomendable dar un nombre significativo para no olvi- Atributos de un objeto
dar lo que contiene. El smbolo especial <- permite asig- Una objeto definido en el entorno R tiene ciertos atributos
nar la informacion al objeto. Ademas, se puede utilizar la tales como:
funcion class() para identificar el tipo de objeto.
Nombre, nombre de las dimensiones
A continuacion, se muestran ejemplos de lo expuesto:
dimensiones (vectores, matrices, arreglos)
peso<-1.5 #numeric
clase
peso
longitud
## [1] 1.5
Otros atributos definidos por el usuario
class(peso)
Para acceder a estos, se puede utilizar la funcion attributes().
## [1] "numeric"

n<-15 #integer
5. Tipos de Objetos en R
n
5.1 Vectores
## [1] 15 El objeto mas basico es el vector, un conjunto de datos de
la misma clase. c() es usado para crear vectores, ademas se
class(n)
pueden crear vectores vacos con la funcion vector(). El
## [1] "numeric" operador : permite crear una secuencia de datos enteros.

z<-1+2i #complex entidad<-c("Privado","Publico") #character


z entidad

## [1] 1+2i ## [1] "Privado" "Publico"

class(z) class(entidad)

## [1] "complex" ## [1] "character"

resp<-(1==2) #logical length(entidad)


resp
## [1] 2
## [1] FALSE
peso<-c(1.5,1.3,1.7) #numeric
class(resp) peso

m http://iple.com.pe 4
Introduccion al R

## [1] 1.5 1.3 1.7 un vector con la funcion names(). Esto permite entender
mejor a lo que refiere cada elemento.
class(peso)
integrante <- c("Carlos Ruiz", "Economista")
## [1] "numeric" names(integrante) <- c("Nombre", "Profesion")
integrante
length(peso)
## Nombre Profesion
## [1] 3 ## "Carlos Ruiz" "Economista"
y<-5:7 #integer
y Valores Especiales
## [1] 5 6 7 Existen casos especiales en los numeros, 0/0, 1/0, -1/0.

class(y) 0/0
## [1] "integer" ## [1] NaN
length(y) 1/0
## [1] 3 ## [1] Inf
z<-c(1+2i,1+3i,1+4i) #complex -1/0
z
## [1] -Inf
## [1] 1+2i 1+3i 1+4i

class(z)
Mezclando objetos
## [1] "complex" Cuando mezclamos objetos en un vector, R automaticamente
define una clase en comun segun el dominio de cada uno en
length(z)
el siguiente orden:
## [1] 3 1. character
resp<-entidad=="Privado" #logical 2. complex
resp
3. numeric
## [1] TRUE FALSE
4. integer
class(resp)
5. logical
## [1] "logical"
y <- c(1.7, "a") # character
# Vector Vaco
y <- c(TRUE, 2) #numeric
nullvector<-vector("numeric", length = 10)
y <- c("a", TRUE) #character
nullvector

## [1] 0 0 0 0 0 0 0 0 0 0
Coercion explcita
class(nullvector)
Los objectos pueden ser forzados a cambiar de tipo de clase
## [1] "numeric" usando la funcion as.*.

Adicionalmente, se puede dar nombre a los elementos de

m http://iple.com.pe 5
Introduccion al R

x<-0:6 ## [1] TRUE


class(x)
is.nan(x)
## [1] "integer"
## [1] FALSE
as.numeric(x)
y <- 0/0
## [1] 0 1 2 3 4 5 6 y

as.logical(x) ## [1] NaN

## [1] FALSE TRUE TRUE TRUE TRUE TRUE TRUE is.na(y)

as.character(x) ## [1] TRUE

## [1] "0" "1" "2" "3" "4" "5" "6" is.nan(y)

as.complex(x) ## [1] TRUE

## [1] 0+0i 1+0i 2+0i 3+0i 4+0i 5+0i 6+0i

Cuando el cambio de clase es incoherente, se convierte en


5.2 Matrices
un dato perdido NA (Not Available). Una matriz es un arreglo con cierto numero de filas y de
columnas. Al igual que un vector, las matrices deben con-
entidad<-c("Privada","Publica") #character tener elementos de la misma clase. Este tiene el atributo
as.numeric(entidad) dimension.

## Warning: NAs introducidos por coercion # Creando una matriz


data <- matrix(1:6,nrow=2,ncol=3)
## [1] NA NA
data
as.logical(entidad)
## [,1] [,2] [,3]
## [1] NA NA ## [1,] 1 3 5
## [2,] 2 4 6

dim(data)
Valores perdidos
Existen dos tipos de datos perdidos en R. ## [1] 2 3

NA (Not available), el valor no esta disponible o esta attributes(data)


perdido.
## $dim
NaN (Not a number), valor perdido debido a opera- ## [1] 2 3
ciones matematicas no definidas.
length(data)

x <- as.numeric("a") ## [1] 6

## Warning: NAs introducidos por coercion # Inclusion de datos por fila


data <- matrix(1:6,nrow=2,ncol=3,byrow=TRUE)
x data
## [1] NA ## [,1] [,2] [,3]
## [1,] 1 2 3
is.na(x)
## [2,] 4 5 6

m http://iple.com.pe 6
Introduccion al R

# Inclusion de datos por columna ## [,1] [,2] [,3]


data <- matrix(1:6,nrow=2,ncol=3,byrow=FALSE) ## vec1 7 5 9
data ## vec2 2 2 3

## [,1] [,2] [,3] rownames(proceso) <- c("Dinamica","Entrevista")


## [1,] 1 3 5 colnames(proceso) <- c("Lunes","Martes","Jueves")
## [2,] 2 4 6 proceso

# Una matriz a partir de un vector ## Lunes Martes Jueves


data <- seq(from=1,to=23,by=2) ## Dinamica 7 5 9
dim(data) <- c(3,4) ## Entrevista 2 2 3
data

## [,1] [,2] [,3] [,4]


5.3 Factores
## [1,] 1 7 13 19
## [2,] 3 9 15 21 Los factores son un tipo de dato estadstico usado para al-
## [3,] 5 11 17 23 macenar variables categoricas. Es importante R reconozca
si trabaja con variables categoricas puesto que los modelos
estadsticos que se ensenara posteriormente los tratan de
cbind() y rbind() un modo particular. Las etiquetas para los factores son
mas recomendables de utilizar que la numeracion. Por
Las matrices tambien pueden ser creadas con estas dos fun-
ejemplo, considerando la variable Genero, es mejor (Fe-
ciones, ya que se pueden ver como una combinacion de vec-
menino,Masculino) que (1,2).
tores colocados una al lado del otro ya sea por columna o
por fila. exito <- factor(c("si","no","si","si","no","no"))
exito
x=2:6
y=1:5 ## [1] si no si si no no
## Levels: no si
cbind(x,y)
# podemos definir el orden de los niveles
## x y exito<-factor(c("si","no","si","si","no","no"),
## [1,] 2 1 levels=c("si","no"))
## [2,] 3 2 exito
## [3,] 4 3
## [4,] 5 4 ## [1] si no si si no no
## [5,] 6 5 ## Levels: si no

rbind(x,y) # Resumen exitos


table(exito)
## [,1] [,2] [,3] [,4] [,5]
## x 2 3 4 5 6 ## exito
## y 1 2 3 4 5 ## si no
## 3 3

rownames y colnames # Cambio de atributo a valores enteros


unclass(exito)
Al igual que los vectores, se le pueden dar nombres a las
filas y columnas de una matriz. ## [1] 1 2 1 1 2 2
## attr(,"levels")
vec1 <- c(7,5,9) ## [1] "si" "no"
vec2 <- c(2,2,3)
proceso <- rbind(vec1,vec2) exito_copy <- unclass(exito)
proceso exito[1]

m http://iple.com.pe 7
Introduccion al R

## [1] si tintos tipos de objetos. Cada columna representa una vari-


## Levels: si no able o caracterstica como Peso, Sexo, Edad, Educacion;
ademas cada una de las caractersticas es del mismo tipo.
class(exito[1]) #removio el atributo levels Data Frames son usualmente creados con data.frame(),
read.table() y read.csv(). Por otro lado, data.matrix()
## [1] "factor" puede convertirlo en una matriz.

exito_copy[1] clima <- data.frame(id=1:4,


a~
no=factor(c("2010","2010",
## [1] 1 "2010","2011")),
tempo=factor(c("verano",
class(exito_copy[1]) #cambio el objeto "oto~
no",
"verano",
## [1] "integer" "oto~
no")),
temp_prom=c(21,18,24,19))
# Convertir un vector a factor
sexo_vector <- c("F","F","M","F","M","M")
clima
sexo_vector
## id a~
no tempo temp_prom
## [1] "F" "F" "M" "F" "M" "M" ## 1 1 2010 verano 21
## 2 2 2010 oto~no 18
sexo_factor <- factor(sexo_vector)
## 3 3 2010 verano 24
sexo_factor
## 4 4 2011 oto~no 19
## [1] F F M F M M names(clima[,2:4])
## Levels: F M
## [1] "a~
no" "tempo" "temp_prom"
Asimismo, se debe diferenciar entre las variables categoricas head(clima,n=2) #2 primeras filas
nominales y ordinales. La primera no implica un orden de-
terminado, mientras que la segunda s. ## id a~ no tempo temp_prom
## 1 1 2010 verano 21
# Pases ## 2 2 2010 oto~ no 18
paises_vector <- c("Peru", "Colombia", "Chile")
tail(clima,n=1) #ultima fila
paises_factor <- factor(paises_vector)
paises_factor ## id a~ no tempo temp_prom
## 4 4 2011 oto~ no 19
## [1] Peru Colombia Chile
## Levels: Chile Colombia Peru nrow(clima) #numero de filas
## [1] 4
# Temperatura
temp_vec <- c("Alta", "Baja", "Alta", ncol(clima) #numero de columnas
"Baja", "Media") ## [1] 4
temp_fact <- factor(temp_vec, order = TRUE,
levels = c("Baja", "Media", dim(clima) #dimension
"Alta"))
## [1] 4 4
temp_fact
summary(clima[,2:4]) #resumen de datos
## [1] Alta Baja Alta Baja Media
## Levels: Baja < Media < Alta ## a~
no tempo temp_prom
## 2010:3 oto~
no :2 Min. :18.00
## 2011:1 verano:2 1st Qu.:18.75
## Median :20.00
5.4 Data Frames ## Mean :20.50
Es la manera en que se almacena una base de datos que con- ## 3rd Qu.:21.75
tienen perfiles y variables, las variables pueden ser de dis- ## Max. :24.00

m http://iple.com.pe 8
Introduccion al R

Aplicando la funcion str() se puede saber rapidamente la ## [[1]]


estructura de la base de datos. ## [1] 1 2 3 4 5 6 7 8 9 10
##
str(clima) ## [[2]]
## [,1] [,2] [,3]
## 'data.frame': 4 obs. of 4 variables:
## [1,] 1 4 7
## $ id : int 1 2 3 4
## [2,] 2 5 8
## $ a~ no : Factor w/ 2 levels "2010","2011": 1 1 1 2
## [3,] 3 6 9
## $ tempo : Factor w/ 2 levels "oto~ no","verano": 2 1 2 1
##
## $ temp_prom: num 21 18 24 19
## [[3]]
## mpg cyl disp hp
## Mazda RX4 21.0 6 160.0 110
5.5 Listas ## Mazda RX4 Wag 21.0 6 160.0 110
## Datsun 710 22.8 4 108.0 93
Es similar a un vector, con la diferencia que este puede
## Hornet 4 Drive 21.4 6 258.0 110
contar con elementos de distintas clases y de diferentes di-
## Hornet Sportabout 18.7 8 360.0 175
mensiones.
## Valiant 18.1 6 225.0 105
## Duster 360 14.3 8 360.0 245
x <- list(1.5,"Blanco",FALSE,6)
## Merc 240D 24.4 4 146.7 62
x
## Merc 230 22.8 4 140.8 95
## [[1]] ## Merc 280 19.2 6 167.6 123
## [1] 1.5
Para anadir nombres a los objetos pertenecientes a una
##
lista, existen dos maneras. La primera es especificando el
## [[2]]
nombre dentro de la funcion list() y la segunda utilizando
## [1] "Blanco"
la funcion names() despues de haber creado la lista.
##
## [[3]]
# Lista con los nombres incluidos
## [1] FALSE
lista1 <- list(vector=vec,matriz=mat,datos=datos)
##
lista1
## [[4]]
## [1] 6 ## $vector
## [1] 1 2 3 4 5 6 7 8 9 10
# Por coercion se vuelven caracteres
##
y <- c(1.5,"Blanco",FALSE,6)
## $matriz
y
## [,1] [,2] [,3]
## [1] "1.5" "Blanco" "FALSE" "6" ## [1,] 1 4 7
## [2,] 2 5 8
## [3,] 3 6 9
# Vector numerico ##
vec <- 1:10 ## $datos
## mpg cyl disp hp
# Matrix numerica ## Mazda RX4 21.0 6 160.0 110
mat <- matrix(1:9, ncol = 3) ## Mazda RX4 Wag 21.0 6 160.0 110
## Datsun 710 22.8 4 108.0 93
# Primeros 10 elementos de la data existente ## Hornet 4 Drive 21.4 6 258.0 110
# mtcars ## Hornet Sportabout 18.7 8 360.0 175
datos <- mtcars[1:10,1:4] ## Valiant 18.1 6 225.0 105
## Duster 360 14.3 8 360.0 245
# Lista con los elementos anteriores ## Merc 240D 24.4 4 146.7 62
lista <- list(vec,mat,datos) ## Merc 230 22.8 4 140.8 95
lista ## Merc 280 19.2 6 167.6 123

m http://iple.com.pe 9
Introduccion al R

# Creacion de lista mi_lista <- list(obj1=5,obj2="BCP",obj3=FALSE)


lista2 <- list(vec,mat,datos)
mi_lista[[2]]
# Adicion de nombres
names(lista2) <- c("vector","matriz","datos") ## [1] "BCP"

lista2 mi_lista$obj2

## $vector ## [1] "BCP"


## [1] 1 2 3 4 5 6 7 8 9 10
##
## $matriz 6.1 Indexacion por vectores
## [,1] [,2] [,3] 1. Enteros positivos, indica los valores a ser selecciona-
## [1,] 1 4 7 dos.
## [2,] 2 5 8
## [3,] 3 6 9 2. Enteros negativos, indica los valores a ser excludos.
## 3. Logicos, los valores verdaderos (TRUE) son selec-
## $datos cionados.
## mpg cyl disp hp
## Mazda RX4 21.0 6 160.0 110 4. Cadena de caracteres, indica el nombre de la variable
## Mazda RX4 Wag 21.0 6 160.0 110 que contiene los elementos a ser seleccionados.
## Datsun 710 22.8 4 108.0 93
## Hornet 4 Drive 21.4 6 258.0 110 meses <- c("Ene","Feb","Mar","Abr",
## Hornet Sportabout 18.7 8 360.0 175 "May","Jun","Jul")
## Valiant 18.1 6 225.0 105 names(meses) <- c("m1","m2","m3","m4","m5",
## Duster 360 14.3 8 360.0 245 "m6","m7")
## Merc 240D 24.4 4 146.7 62 meses
## Merc 230 22.8 4 140.8 95
## Merc 280 19.2 6 167.6 123 ## m1 m2 m3 m4 m5 m6 m7
## "Ene" "Feb" "Mar" "Abr" "May" "Jun" "Jul"

ind_pos <- c(1,4,5)


6. Subsetting meses[ind_pos]
Muchas veces en nuestros analisis debemos seleccionar un ## m1 m4 m5
subconjunto especfico de un vector, una matriz, un data ## "Ene" "Abr" "May"
frame o una lista. Esto se puede hacer con los siguientes
operadores: ind_neg <- c(-2,-6)
meses[ind_neg]
[], el corchete simple devuelve un objeto de la misma
clase que el original. Se usa tambien para seleccionar ## m1 m3 m4 m5 m7
mas de un elemento. ## "Ene" "Mar" "Abr" "May" "Jul"
[[]], el corchete doble se usa para extraer elementos ind_log <- c(T,F,F,F,T,T,T)
de un data frame o lista. meses[ind_log]
$, el dolar se usa para extraer elementos de un data ## m1 m5 m6 m7
frame o lista por nombre. ## "Ene" "May" "Jun" "Jul"

ind_car <- c("m1","m3","m5")


z <- c(20,15,3,8) meses[ind_car]
z[2]
## m1 m3 m5
## [1] 15 ## "Ene" "Mar" "May"

m http://iple.com.pe 10
Introduccion al R

Tambien se puede hacer uso de los operadores logicos para ## [2,] 2 4 6 8


seleccionar un subconjunto de datos.
mi_matriz[2,3]
Operadores Comparativos: ## [1] 6
<, menor que
# Elementos de la segunda fila
>, mayor que mi_matriz[2,]

<=, menor o igual que ## [1] 2 4 6 8


>=, mayor o igual que # Elementos de la cuarta columna
mi_matriz[,4]
==, iguales entre s
!=, diferentes ## [1] 7 8

x <- seq(20,30,by=1.5) 6.3 Subsetting en un Data Frame


x
planetas <- data.frame(
## [1] 20.0 21.5 23.0 24.5 26.0 27.5 29.0 nombre=c("Mercurio","Venus",
"Tierra","Marte",
ind <- x>25 "Jupiter","Saturno",
ind "Urano","Neptuno"),
terrestre=factor(c("si","si",
## [1] FALSE FALSE FALSE FALSE TRUE TRUE TRUE
"si","si",
x[ind] "no","no",
"no","no")),
## [1] 26.0 27.5 29.0 diametro=c(0.382,0.949,1,
0.532,11.209,
# Dos condiciones juntas 9.449,4.007,3.883)
# Operador Logico Y )
ind <- (x>23) & (x<28)
x[ind] planetas

## [1] 24.5 26.0 27.5 ## nombre terrestre diametro


## 1 Mercurio si 0.382
# Operador Logico O ## 2 Venus si 0.949
ind <- (x<15) | (x>23) ## 3 Tierra si 1.000
x ## 4 Marte si 0.532
## 5 Jupiter no 11.209
## [1] 20.0 21.5 23.0 24.5 26.0 27.5 29.0 ## 6 Saturno no 9.449
## 7 Urano no 4.007
## 8 Neptuno no 3.883
6.2 Subsetting en una Matriz
planetas[1,3]
Se pueden obtener subconjuntos de la matriz por medio de
la manera usual con los ndices [i,j]. ## [1] 0.382
planetas[3:5,1:2]
mi_matriz <- matrix(1:8,nrow=2,ncol=4)
mi_matriz ## nombre terrestre
## 3 Tierra si
## [,1] [,2] [,3] [,4] ## 4 Marte si
## [1,] 1 3 5 7 ## 5 Jupiter no

m http://iple.com.pe 11
Introduccion al R

planetas[3,] class(mi_lista[c(1,3)]) #sigue siendo una lista

## nombre terrestre diametro ## [1] "list"


## 3 Tierra si 1
# Devuelve el segundo objeto
planetas[8,"diametro"] # con su propia clase
mi_lista[[2]]
## [1] 3.883
## [1] 1 3 5
planetas$terrestre
class(mi_lista[[2]]) #numeric
## [1] si si si si no no no no
## Levels: no si ## [1] "numeric"

planetas$diametro[1:4] mi_lista[["numeros"]] #otra forma

## [1] 0.382 0.949 1.000 0.532 ## [1] 1 3 5

mi_lista$numeros #otra forma


6.4 Subsetting en una Lista ## [1] 1 3 5

mi_lista <- list(letras = letters[1:4], # Devuelve el tercer elemento


numeros = seq(1,5,by=2), # del primer objeto
sexo = factor(c("F","M","F"))) mi_lista[[1]][3]
mi_lista
## [1] "c"
## $letras
mi_lista$letras[3]
## [1] "a" "b" "c" "d"
## ## [1] "c"
## $numeros
## [1] 1 3 5 mi_lista[[c(1,3)]]
##
## $sexo ## [1] "c"
## [1] F M F
## Levels: F M
7. Operaciones Basicas
mi_lista[1]

## $letras x <- 10
## [1] "a" "b" "c" "d" y <- x^3 * 4 + 20
y
class(mi_lista[1]) #sigue siendo una lista
## [1] 4020
## [1] "list"
x_vector <- c(1:6)
mi_lista[c(1,3)] x_vector^2

## $letras ## [1] 1 4 9 16 25 36
## [1] "a" "b" "c" "d"
## x_vector_nuevo <- x_vector^2 + 1
## $sexo
## [1] F M F sum(x_vector_nuevo) # Suma de valores del vector
## Levels: F M
## [1] 97

m http://iple.com.pe 12
Introduccion al R

min(x_vector_nuevo) # Mnimo valor del vector 8. Importacion y Exportacion de Datos


## [1] 2 8.1 read.table() y write.table()
max(x_vector_nuevo) # Maximo valor del vector El siguiente codigo guardara el data frame creado anterior-
mente llamado planetas.
## [1] 37
write.table(planetas,file="planetas.rdata")
mean(x_vector_nuevo) # Media del vector
## [1] 16.16667 Ahora, vamos a cargar una base de datos de delicuentes que
han cometido crimenes menores, los cuales fueron puestos
w <- c(2,9,5,6) en un programa que involucraba conocer a sus vctimas. Si
z <- c(4,7,3,8) el programa ha funcionado, los delicuentes no vuelven ha
cometer el acto el ano proximo. Para esto, empleamos el
w + z # Suma elemento por elemento siguiente codigo.
## [1] 6 16 8 14
criminales <- read.table("reoffend.rdata")
w * z # Multiplicacion elemento por elemento dim(criminales) # Dimensiones
## [1] 8 63 15 48 ## [1] 2509 5
w / z # Division elemento por elemento str(criminales) # Estructura de los datos
## [1] 0.500000 1.285714 1.666667 0.750000
## 'data.frame': 2509 obs. of 5 variables:
w < z ## $ sex : int 1 1 1 1 1 1 1 1 1 1 ...
## $ age : int 22 29 19 22 18 26 16 17 46 19 ...
## [1] TRUE FALSE FALSE TRUE ## $ prev : int 2 0 1 0 0 0 0 0 0 2 ...
w == z ## $ scheme: int 1 1 1 1 1 1 1 1 1 1 ...
## $ reoff : int 0 1 1 0 0 0 1 1 0 1 ...
## [1] FALSE FALSE FALSE FALSE
head(criminales) # Primeras observaciones
x_matriz <- matrix(3:6,2,2)
x_matriz ## sex age prev scheme reoff
## 1 1 22 2 1 0
## [,1] [,2] ## 2 1 29 0 1 1
## [1,] 3 5 ## 3 1 19 1 1 1
## [2,] 4 6 ## 4 1 22 0 1 0
y_matriz <- matrix(1:4,2,2) ## 5 1 18 0 1 0
y_matriz ## 6 1 26 0 1 0

## [,1] [,2] Segun la estructura de los datos, todas las variables son de
## [1,] 1 3 clase integer. Sin embargo, la variable sex, scheme y reoff
## [2,] 2 4 no pertenecen a esta clase y se deben convertir a factor.

x_matriz * y_matriz # Elemento por elemento criminales$sex <- as.factor(criminales$sex)


levels(criminales$sex)
## [,1] [,2]
## [1,] 3 15 ## [1] "0" "1"
## [2,] 8 24
x_matriz %*% y_matriz # Verdadera multiplicacion levels(criminales$sex) <- c("Femenino","Masculino")
criminales$scheme <- as.factor(criminales$scheme)
## [,1] [,2] levels(criminales$scheme) <- c("no","si")
## [1,] 13 29 criminales$reoff <- as.factor(criminales$reoff)
## [2,] 16 36 levels(criminales$reoff) <- c("no","si")

m http://iple.com.pe 13
Introduccion al R

Algunas funciones importantes que se debe mencionar son


head(criminales) ls() y rm("variable"), que sirven para listar todos los
objetos existentes en el espacio de trabajo y para remover
## sex age prev scheme reoff
ciertos objetos que especifique el usuario del espacio de tra-
## 1 Masculino 22 2 si no
bajo, respectivamente.
## 2 Masculino 29 0 si si
## 3 Masculino 19 1 si si
## 4 Masculino 22 0 si no 9. Bucles
## 5 Masculino 18 0 si no
## 6 Masculino 26 0 si no R posee diferentes estructuras de control al igual que otros
lenguajes de programacion.

8.2 read.csv() y read.csv2() 9.1 For


Estas funciones se utilizan para leer hojas de calculo con Sirve para repetir tareas una y otra vez.
extension .csv (Comma Separated Values). La diferencia de
las funciones radica en que el primero tine como smbolo Sintaxis:
de separacion una coma (,), mientras que el segundo un for (Secuencia) {
punto y coma (;). Sentencia
}
frecuencia <- read.csv("frecuencia.csv",sep=",",
header = TRUE)
head(frecuencia) for (i in 1:10) {
print(i)
## FC.basal FC.6
}
## 1 84.2697 91.4634
## 2 84.2697 91.4634 ## [1] 1
## 3 84.0619 91.1834 ## [1] 2
## 4 85.6542 91.8788 ## [1] 3
## 5 87.2093 91.1772 ## [1] 4
## 6 87.1246 89.7992 ## [1] 5
## [1] 6
## [1] 7
8.3 read.xls() ## [1] 8
Esta funcion sirve para leer archivos Excel (extension .xls ## [1] 9
o .xlsx) guardar la informacion en un data frame en el R. ## [1] 10

dias <- c("Lunes", "Martes", "Jueves")


library(gdata)
mis_datos <- read.xls("Datos_Excel.xlsx",sheet=1)
for(i in 1:3) {
head(mis_datos)
print(dias[i])
}

8.4 R Workspace ## [1] "Lunes"


## [1] "Martes"
Al finalizar la sesion de R, aparecera una ventana consul-
## [1] "Jueves"
tado si se desea guardar los datos de la actual sesion. Si
la respuesta es afirmativa, se creara un archivo conteniendo
todos los objetos R que se tienen en la sesion actual, ademas
de los ultimos diez o mas comandos que se tipearon. Esto 9.2 If
es lo que se llama R Workspace y contiene toda la in- Sirve para evaluar condiciones y tomar una decision.
formacion necesaria para reiniciar la sesion exactamente
donde se haba dejado.

m http://iple.com.pe 14
Introduccion al R

como las funciones ya incorporadas en el software.


Sintaxis:
if (Condicion) {
Sintaxis:
Expresion
} nombre <- function(argumentos) {
Cuerpo
if (Condicion) {
Valor devuelto
Expresion
}
} else {
Expresion Alternativa
}
mi_potencia <- function(num) {
if (Condicion1) { b <- num^2
Expresion1 return(b)
} else if (Condicion2){ }
Expresion2
} else { mi_potencia(7)
Expresion Alternativa
} ## [1] 49

mi_potencia(10)
temperatura <- 23
## [1] 100
if(temperatura > 19){
print("No hace tanto fro")
Las funciones generalmente devuelven un objeto que fue el
}
resultado de ejecutar el cuerpo de la funcion. En el ejemplo
## [1] "No hace tanto fro" anterior devuelve b.

temperatura <- 12 num <- c(1:6)


if(temperatura > 19){ mi_potencia(num)
print("No hace tanto fro")
} else{ ## [1] 1 4 9 16 25 36
print("Hace fro")
}
# Funcion para calcular el
## [1] "Hace fro" # factorial de un numero
n_fact <- function(n) {
num <- 5 producto <- 1
if(num < 0){ for (i in 1:n) {
print("El numero es negativo") producto <- producto*i
} else if(num == 0){ }
print("El numero es cero") return(producto)
} else{ }
print("El numero es positivo")
} n_fact(5)

## [1] "El numero es positivo" ## [1] 120

n_fact(10)
10. Funciones ## [1] 3628800
Las funciones son creadas usando function(). La ver-
dadera fortaleza de R es la facilidad con la que el usuario
puede escribir nuevas funciones que pueden ser accedidas

m http://iple.com.pe 15
Introduccion al R

Recursos Adicionales
[1] Santiago Benitez-Vieyra. Introduccion al Lenguage R. Modelos Lineales y Fundamentos de Programacion, 2010.
URL https://github.com/santiagombv/cursoR.
[2] OReilly. Try R. URL http://tryr.codeschool.com/levels/1/challenges/3.

[3] Roger D. Peng. R Programming for Data Science. Leanpub, 2015.


[4] Phil Spector. Data Manipulation with R. Springer Verlag, New York, 2008.

m http://iple.com.pe 16