0% encontró este documento útil (0 votos)
29 vistas95 páginas

Introducción al Lenguaje R y Estadística

Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
29 vistas95 páginas

Introducción al Lenguaje R y Estadística

Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Introducción al lenguaje R

Prácticas de laboratorio

Inferencia Estadística Introducción al lenguaje R 1 / 95


Contenidos

Introducción

Importación y Exportación de datos

Estructuras de datos en R

Control de Flujo
Esquemas de Control de Flujo
Funciones Iterativas

Funciones
Diseño de Funciones en R
Funciones Predefinidas de Control y Parada

Gráficos

Inferencia Estadística Introducción al lenguaje R 2 / 95


¿Qué es R?

R es un entorno y un lenguaje de programación para estadística y


gráficos.
Multiplataforma.
Libre y gratuito.
Es la implementación GNU del lenguaje S.
Formado por una comunidad de programadores muy dinámica.

Inferencia Estadística Introducción al lenguaje R 3 / 95


¿Qué es R?
Las funciones en R se organizan en paquetes o librerías.
La distribución de estos paquetes la centraliza el Proyecto CRAN,
http://cran.r-project.org/, y la realiza a través de una
red de espejos o mirrors.

En la actualidad son unos cuantos miles los paquetes disponibles.


Inferencia Estadística Introducción al lenguaje R 4 / 95
Instalación de R

Toda la información sobre la instalación está disponible en


http://cran.es.r-project.org/
La instalación depende del sistema operativo (consultar
InstalacionR.pdf).
R consta de un sistema base y de de una serie de paquetes
adicionales:
https://cran.r-project.org/web/packages/

Inferencia Estadística Introducción al lenguaje R 5 / 95


¿Qué es R-Studio?

RStudio (http://rstudio.org/) es una GUI (del inglés


Graphical user interface) para R programada en C#.
Es multiplataforma (Windows, Linux y Mac).
Permite abrir varios scripts a la vez.
Muestra el espacio de trabajo (workspace) y el historial.
Integra la ayuda y la gestión de librerías.

Inferencia Estadística Introducción al lenguaje R 6 / 95


¿Qué es R-Studio?

Inferencia Estadística Introducción al lenguaje R 7 / 95


¿Qué es R-Studio?

Inferencia Estadística Introducción al lenguaje R 8 / 95


Instalación de paquetes o librerías

A través de la instrucción library() se muestran los paquetes que


tenemos instalados
La instalación de paquetes se lleva a cabo a través de
install.packages() sin más que escoger el espejo más cercano
para una rápida descarga:
install.packages("lattice")
Carga del paquete:
library(lattice)
El contenido del paquete (funciones y bases de datos) se obtiene
en https://cran.r-project.org/web/packages/
lattice/index.html y a través de:
library(help=lattice)
Para actualizar a la última versión escribir update.packages()

Inferencia Estadística Introducción al lenguaje R 9 / 95


Ayuda en R

A través de ? se obtiene ayuda de una función específica en R,


por ejemplo, read.table
?read.table
help(read.table)
help.search proporciona los nombres de funciones asociados con
un determinado ‘tema’
help.search("data.input")
Utilizaremos find para conocer el nombre del paquete que
contiene una función
find("read.table")
apropos devuelve el nombre de los objetos de la lista de
búsqueda coincidentes
apropos("lm")
apropos("nova")

Inferencia Estadística Introducción al lenguaje R 10 / 95


Más ayuda...

La ayuda de una función se puede completar con ejemplos


almacenados en R
example(lm)
Existe multitud de ayuda en la red, por ejemplo en,
Documentation/Manuals http://cran.es.r-project.org/
FAQ: http://cran.es.r-project.org/faqs.html
También en R seek: www.rseek.org
A través de demo podemos conocer distintas funcionalidades de
R
demo(graphics)
Se puede consultar el manual de un paquete concreto como ya
hemos visto.

Inferencia Estadística Introducción al lenguaje R 11 / 95


Iniciando R

Cuando R se inicia aparece la ventana del programa GUI


(Graphical User Interface). En RStudio, el GUI es una de las
ventanas del entorno.
Tras el mensaje de apertura aparece el prompt >.
Si se intenta ejecutar un comando que se ha escrito en forma
incompleta, el programa presenta un + que es el prompt de
continuación.
Operador asignación: < − unión del menor y del menos sin
espacio entre ellos
x <- 5 #sin espacio
x< -5 #con espacio cuestión tipo lógica

Inferencia Estadística Introducción al lenguaje R 12 / 95


Iniciando R

Un comando escrito se ejecuta con la tecla intro.


El signo # indica la introducción de un comentario.
El punto y coma ; se utiliza para separa expresiones.
La tecla ↑ permite recuperar instrucciones anteriores y las → y ←
corregir errores.
q() es el comando para salir.

Inferencia Estadística Introducción al lenguaje R 13 / 95


Espacio y directorio de trabajo

El workspace es el espacio de trabajo en que se incluyen todos


los objetos definidos por el usuario (ya veremos qué son estos
objetos, que incluyen variables, vectores, dataframes. . . ), se
almacena en la memoria intermedia mientras trabajas con R
Funciones para manejar el workspace:
getwd(): Muestra el directorio de trabajo.
setwd("directorio"): Cambia al directorio de trabajo especificado.
ls(): Lista lo que hay en el directorio de trabajo.
history(): Muestra los últimos comandos ejecutados.
savehistory(): Guarda el historial de comandos, por defecto se
guarda en .RHistory
loadhistory(): Carga el historial de comandos.
save.image("mywspace.R"): Guarda los objetos del workspace, por
defecto en .RData
load("mywspace.R"): Carga el workspace mywspace.R

Inferencia Estadística Introducción al lenguaje R 14 / 95


Directorio

Directorio de trabajo
getwd(): indica el directorio actualidad
setwd permite establecer un directorio como habitual
setwd("c:\\temp\\Datos")

Inferencia Estadística Introducción al lenguaje R 15 / 95


Funciones matemáticas

R puede utilizarse como calculadora científica:

Función Significado
log(x) Logaritmo natural
exp(x) Exponencial
log(x,n) Logaritmo en base n de x
log10(x) Logaritmo en base 10 de x
sqrt(x) Raíz cuadrada
factorial(x) Factorial
floor(x) mayor entero menor que x
ceiling(x) menor entero mayor que x
round(x,digits=0) Redondea x
abs(x) Valor absoluto de x
pi π

Inferencia Estadística Introducción al lenguaje R 16 / 95


Funciones matemáticas

La mayoría de las operaciones en R (+,*,..) y de funciones (log(),


exp(),..) están definidas de forma vectorial, es decir, operan
componente a componente.
La función principal para definir un vector es a través de sus
componentes, con la función c().
Los paréntesis () se emplean para los argumentos de las
funciones y para agrupar expresiones algebráicas. Los corchetes
[] o dobles corchetes [[ ]] para seleccionar partes de un objeto así
como el $. Las llaves { } para agrupar expresiones.

Inferencia Estadística Introducción al lenguaje R 17 / 95


Funciones matemáticas

Algunos ejemplos:
floor(5.6)
ceiling(5.4)
round(5.6)
round(5.4)
Números con exponentes:
1.3e3 = 1300
1e-2 = 0.01
Valores perdidos NA
x<-c(1:4,NA)
x
mean(x)
mean(x,na.rm=TRUE)
which(is.na(x))

Inferencia Estadística Introducción al lenguaje R 18 / 95


Ejemplos operaciones

> 2+3
[1] 5
> 3/2
[1] 1.5
> 2^3 # otra forma 2**3
[1] 8
> cos(4*pi)
[1] 1
> log(0)
[1] -Inf

Inferencia Estadística Introducción al lenguaje R 19 / 95


Operadores en R

Aritméticos + − ∗/%%ˆ
Relacionales <<=>>===! =
Lógicos !&|is.na(x)
Fórmula modelo ∼
Secuencia :
Indexar $

Inferencia Estadística Introducción al lenguaje R 20 / 95


Carga, Importación y Exportación de Datos

Inferencia Estadística Introducción al lenguaje R 21 / 95


Cargando datos

Cargar datos de una librería de R con la instrucción data:


library(nlme)
data(Name)
data() #muestra los datos disponibles
en el sistema base
Carga de un fichero en formato nativo de R:
load("nombrefichero.rda")
Guardar todos los datos de una sesión con la instrucción save:
save(datos,file="datos.rda")
save(x,y,file="ejemplo.RData")

Inferencia Estadística Introducción al lenguaje R 22 / 95


Importando datos

Existen muchas funciones y librerías en R para importar datos


read.table importa datos y los almacena en un data.frame.
read.table(file, header = FALSE,
sep = "", dec=".".......)
sep: separador de columnas usado en el archivo.
dec: símbolo que separa la parte entera de la decimal. Puede ser
’.’ o ’,’.
header indica si se importan los nombre de las variables
Si se especifica un separador, los espacios en blanco iniciales y
finales en campos de caracteres son considerados como parte del
campo. Para quitar el espacio, se utiliza strip.white = TRUE.

datos <-read.table("/home/Documentos/datos.csv",
header=TRUE, sep=";",na.strings="", dec=",")
datos2 <-read.table("dat.txt",sep="\t",
na.strings=c("NA","?"))

Inferencia Estadística Introducción al lenguaje R 23 / 95


Importando datos

Existen muchas funciones y librerías en R para importar datos


read.csv importa ficheros csv (ficheros de texto separados por
comas) y los almacena en un data.frame.
read.csv(file, header = FALSE,
sep = ",", dec=".".......)
read.xlsx importa ficheros EXCEL y los almacena en un
data.frame. Esta función se encuentra en la librería xlsx.
sheetIndex es la hoja que se quiere importar.
read.xlsx(file, sheetIndex, sheetName=NULL, ...)
Por ejemplo:
tv<-read.xlsx("tudela.xlsx",1)

Inferencia Estadística Introducción al lenguaje R 24 / 95


Importando datos

Existen paquetes específicos para leer datos desde otros


programas estadísticos: ROracle, RPostgreSQL,SASxport,...
El paquete foreign permite importar ficheros desde otros
programas como Epi Info, Minitab, S, SAS, SPSS, Stata,etc
La librería RODBC permite la comunicación con fuentes de bases
de datos compatibles con ODBC (“Open DataBase Conectivity”).

Inferencia Estadística Introducción al lenguaje R 25 / 95


Exportando datos

La función write.table es la mejor opción para exportar


dataframes.
write.table(ejemplo1, file = "ejemplo3.txt",
sep = "\t", dec = ".",
row.names = TRUE,col.names = TRUE)

Inferencia Estadística Introducción al lenguaje R 26 / 95


Exportando datos

La librería foreign también incluye funciones para exportar datos a


otros programas estadísticos.
write.foreign(df, datafile, codefile,
package = c("SPSS", "Stata", "SAS"), ...)
La librería xlsx incluye una función para exportar datos a EXCEL.
write.xlsx(x, file, sheetName="Sheet1",
col.names=TRUE, row.names=TRUE,...)
x es un data.frame que contiene los datos a escribir
file contiene el path del fichero excel a escribir
sheetName es una cadena de caracteres con el nombre de la hoja
excel
col.names es una valor lógico que indica se los nombres de las
columnas se escriben o no
row.names es una valor lógico que indica se los nombres de las
filas se escriben o no

Inferencia Estadística Introducción al lenguaje R 27 / 95


Ejemplo

acero.rda
getwd()
load("acero.rda") #carga
summary(acero)
write.table(acero,file="acero.csv",sep=";",dec=".",
row.names=FALSE) #exportación
aceroimp <- read.table("acero.csv", header=TRUE,
sep=";",na.strings="", dec=".") #importación

Inferencia Estadística Introducción al lenguaje R 28 / 95


Estructuras de datos en R

Inferencia Estadística Introducción al lenguaje R 29 / 95


Tipos de objetos en R

Vector. Colección de elementos del mismo tipo.


Array. Generalización multidimensional de un vector (elementos
del mismo tipo)
Data frame. Cada columna puede ser de un tipo distinto. Las
hojas de datos son apropiadas para describir ‘matrices de datos’
donde cada fila representa a un individuo y cada columna una
varaible.
Factor. Representación para datos categóricos.
List. Las listas son una forma generalizada de vector en las
cuales los elementos no tienen por qué ser del mismo tipo y a
menudo son a su vez vectores o listas.

Inferencia Estadística Introducción al lenguaje R 30 / 95


Nombres de objetos en R: Reglas de Construcción

R es ’case-sensitive’: x ̸= X .
Los nombres no pueden empezar con un número.
Nombres reservados: if, function, etc
Evitar palabras reservadas de R, por ejemplo, c.
Los nombres son combinaciones de letras, números y ’.’.

Inferencia Estadística Introducción al lenguaje R 31 / 95


Comprobando y forzando objetos en R

Tipo Comprobando... Forzando...


Array is.array as.array
Character is.character as.character
Dataframe is.data.frame as.data.frame
Factor is.factor as.factor
List is.list as.list
Logical is.logical as.logical
Matrix is.matrix as.matrix
Numeric is.numeric as.numeric
Time series is.ts as.ts
Vector is.vector as.vector

Inferencia Estadística Introducción al lenguaje R 32 / 95


Vectores

y<-10:15 #El operador ’:’ genera secuencias


y<-c(10,11,12,13,14,15)
length(y)

#nombrando elementos en un vector


recuento<-c(2,10,4)
names(recuento)<-0:2
recuento

#Vectores Lógicos y de caracteres


a<- c(TRUE, FALSE, TRUE, FALSE)
b<- c("A1","A2","A3","A4")

Inferencia Estadística Introducción al lenguaje R 33 / 95


Funciones para realizar operaciones con vectores

Función Significado
length(x) Longitud
sum(x), prod(x) Suma y producto
cumsum(), cumprod() Suma y producto acumulado
sort(x) vector ordenado
max(x), min(x) Máximo y mínimo
mean(x), median(x) Media y mediana
var(x),range(x) varianza y rango
colMeans,colSums media o totales por columna
rowMeans,rowSums media o totales por fila

Inferencia Estadística Introducción al lenguaje R 34 / 95


Función match

La función match indica, dados dos vectores, dónde se


encuentran los valores del segundo en el primero.

primero <- c(7,8,6,5,5,4,5,9,8,1,4)


segundo <- c(1,5)
match(primero,segundo)
[1] NA NA NA 2 2 NA 2 NA NA 1 NA

Inferencia Estadística Introducción al lenguaje R 35 / 95


Indexado de vectores

Elemento que ocupa la segunda posición de a:


a[2]
Eliminando el último elemento de b:
b[-4]
Fuera de rango:
a[8]
Accediendo a varias posiciones simultaneamente:
b[c(2,3)]
b[c(2,3,3,3)]
b[c(2:4)]

Inferencia Estadística Introducción al lenguaje R 36 / 95


Definición de matrices
1 Función matrix:
z <- matrix(c(1,0,0,0,1,0,0,0,1),nrow=3)
z
class(z)
dim(z)
nrow(z)
ncol(z)
2 Dimensionar un vector:
vector<-c(1,2,2,2,2,1)
dim(vector)<-c(3,2)
class(vector)
3 Añadir columnas cbind o filas rbind:
z1<-c(1,2,3)
z2<-c(4,5,6)
z3<-cbind(z1,z2)
class(z3)
Inferencia Estadística Introducción al lenguaje R 37 / 95
Funciones relativas a matrices

Función Significado
dim() Calcula la dimensión
nrow() Calcula el número de filas de la matriz
ncol() Calcula el número de columnas de la matriz
as.matrix() Fuerza un argumento tipo matriz
%*% Multiplicación
t() Calcula la traspuesta
det() Calcula el determinante
solve() Calcula la matriz inversa
eigen() Autovalores y autovectores

Inferencia Estadística Introducción al lenguaje R 38 / 95


Asignando nombres a filas y columnas

Funciones rownames y colnames


rownames(z3) <- c("Tipo1","Tipo2","Tipo3")
colnames(z3) <- c("Comunidad1","Comunidad2")
z3
Función dimnames:
dimnames(z3)<-list(NULL,paste("Comunidad.",1:2,sep=""))
z3

Inferencia Estadística Introducción al lenguaje R 39 / 95


Cálculos sobre matrices

Generamos una matriz de 20 números aleatorios de una


distribución de poisson de media 1.5:
X<-matrix(rpois(20,1.5),nrow=4)
Cálculo de la media de la quinta columna y de la varianza de la
segunda fila:
mean(X[,5])
var(X[2,])
Medias por columna:
colMeans(X)

Inferencia Estadística Introducción al lenguaje R 40 / 95


Matrices

Seleccionando una fila o columna:


X[1,]
X[,3]
Seleccionado varias:
X[,c(2,4)]
Seleccionando elemento a partir de posición:
X[1,1]

Inferencia Estadística Introducción al lenguaje R 41 / 95


Arrays

Los arrays son objetos numéricos con dimensión. Son una


generalización multidimensional de los vectores (elementos del
mismo tipo).
L<-letters(1:24)
dim(L)<-c(4,2,3)
L
Seleccionando la tercera fila de todas las tablas:
L[3,,]
Si queremos mantener la forma original añadimos drop=FALSE:
L[3,,,drop=FALSE]

Inferencia Estadística Introducción al lenguaje R 42 / 95


Cadenas de caracteres

Se definen utilizando las comillas dobles:


a1<-"abc"
a2<-"1234"
a3 <- c(a1,a2) #crea un vector de dos caracteres
length(a3) #longitud del vector
nchar(a3)#número caracteres de cada cadena
paste(a1,a2,sep="") #pega los caracteres
sin separación entre ellos

Inferencia Estadística Introducción al lenguaje R 43 / 95


Factores

Un factor es un vector utilizado para representar datos


categóricos.
En R existen factores nominales y factores ordinales.

municipio<-c("ovd","gij","avl") #vector de caracteres


Municipio<-factor(municipio) #creando el factor
Municipio #print trata a los factores de forma
diferente a otros vectores
class(Municipio) #factor
levels(Municipio) #muestra las categorías

Inferencia Estadística Introducción al lenguaje R 44 / 95


Factores

Los factores creados con factor son nominales


Si queremos crear un factor ordenado utilizaremos ordered:

o<-c("menor que 1","entre 1 y 2","mayor que 2")


o<-ordered(o)
> class(o)
[1] "ordered" "factor"

Inferencia Estadística Introducción al lenguaje R 45 / 95


Convirtiendo a factor

En ocasiones queremos convertir un vector numérico en factor:


f3<-c(1,12,3,25)
f3 <- factor(f3)
as.numeric(f3) #incorrecto
as.numeric(as.character(f3)) #correcto

Inferencia Estadística Introducción al lenguaje R 46 / 95


Listas

Colección ordenada de objetos, llamados Componentes.


Cada componente puede ser de distinto tipo y/o longitud. Por
ejemplo, un vector numérico de tamaño 2, un valor lógico, un
vector de tamaño 3, una matriz y una función.
Los componentes siempre están numerados y pueden ser
referidos por dicho número, o por su nombre (si lo tiene, por
defecto no lo tiene).
Acceso a componentes de una lista: doble corchete ([[]]), o con el
nombre del elemento precedido del símbolo del dólar.
list(): Instrucción para crear una lista.

Inferencia Estadística Introducción al lenguaje R 47 / 95


Listas

Se crean con list:

ejemplolista <- list(nombre="Pedro", casado=T,


esposa="María",nhijos=3,edadhijos=c(4,7,9))
ejemplolista
ejemplolista[5]
is.vector(ejemplolista[5])
ejemplolista[[5]]
ejemplolista[[5]][2]
ejemplolista$edadhijos[2]
ejemplolista$casado

Inferencia Estadística Introducción al lenguaje R 48 / 95


Dataframe

data frame: Estructura similar a una matriz pero las columnas


pueden ser de distinto tipo.
Las componentes deben ser vectores (numéricos, carácter o
lógicos),factores, matrices numéricas u otros data.frames.
La longitud de los vectores debe ser la misma.
En un data.frame, todas las componentes que no son numéricos,
son consideradas factores.

Inferencia Estadística Introducción al lenguaje R 49 / 95


Dataframe

Creando data frames: data.frame


x1 <- 1:10
x2 <- 11:20
x3 <- letters[1:10]
a <- data.frame(x1,x2,x3)
summary(a)
Se pueden convertir matrices a data frames con as.data.frame()

Inferencia Estadística Introducción al lenguaje R 50 / 95


Dataframe

Para trabajar con las variables podemos utilizar $nombre


Si queremos en lugar de lo anterior trabajar con los nombres de
las columnas debemos emplear antes attach().
Añadiendo variables:
a$x4 <- x1+x2
Nombres de las variables:
names(a)

Inferencia Estadística Introducción al lenguaje R 51 / 95


Dataframes

Trabajamos con el fichero tudela.xlsx.


En primer lugar, importamos los datos
tv<-read.xlsx("tudela.xlsx",7)
Con names obtenemos una lista con el nombre de las variables.
names(tv)
[1] "fecha" "X.SO3" "P..Calc" "Res..Ins." "Adición." "Caliza." "X32.um."
[8] "X45.um." "P.Frag." "F.Frag." "MC1." "MC2." "MC7." "MC28."

head muestra parte de la base de datos:


head(tv)

Inferencia Estadística Introducción al lenguaje R 52 / 95


Dataframes

Resumimos la hoja de datos a través de summary (a


continuación solo se muestra parte):
summary(tv)
Adición. Caliza. X32.um. X45.um. P.Frag.
Min. :32.23 4.42 : 5 Min. : 7.12 Min. :0.90 Min. : 80.0
1st Qu.:42.65 4.54 : 5 1st Qu.:10.37 1st Qu.:2.24 1st Qu.:145.0
Median :44.45 3.2 : 4 Median :12.62 Median :4.05 Median :160.0
Mean :44.03 4.34 : 4 Mean :12.05 Mean :3.56 Mean :153.2
3rd Qu.:45.78 4.48 : 4 3rd Qu.:13.23 3rd Qu.:4.36 3rd Qu.:175.0
Max. :47.70 4.49 : 4 Max. :14.52 Max. :5.13 Max. :220.0

dim(tv) conocemos la dimensión del dataframe.

Inferencia Estadística Introducción al lenguaje R 53 / 95


Dataframes

Con [ ] podemos acceder a un elemento, extraer un rango de


valores, grupo de variables, etc
tv[1,1]
tv[1:3,2:3]
tv[2,]
tv[,1]
class(tv)
class(tv[,1])
tv[,c(2,7)]
Ordenando por una variable: Caliza
tv[order(tv$Caliza),]
tv[rev(order(tv$Caliza)),]

Inferencia Estadística Introducción al lenguaje R 54 / 95


Selección de elementos en un dataframe

Cargamos datos load("acero.rda") attach(acero)


Podemos incluir una o varias condiciones:
acero[temperatura=="Alta",]
acero[pr.tbc>median(pr.tbc) & temperatura!="Alta",]
acero[,naverias]
acero2 <- subset(acero,temperatura=="Alta")
Seleccionar todos las columnas numéricas o todas las que son
factores:
acero[,sapply(acero,is.numeric)]
acero[,sapply(acero,is.factor)]

Inferencia Estadística Introducción al lenguaje R 55 / 95


Control de Flujo

Inferencia Estadística Introducción al lenguaje R 56 / 95


Instrucciones de control de flujo

R es un lenguaje de expresiones: todos los comandos ejecutados


son funciones o expresiones que producen un resultado.
Incluye los esquemas de control de flujo de cualquier lenguaje de
programación:
Condicionales
if
ifelse
Repetitivas
for
while
repeat
Alteración de secuencia
break
next
Se puede obtener la sintaxis usando ?Control

Inferencia Estadística Introducción al lenguaje R 57 / 95


Instrucciones de control de flujo

Las instrucciones anteriores pueden requerir la evaluación de una


declaración lógica, que pueden ser expresadas mediante
operadores lógicos

Operadores Significado
== Igual
!= Distinto
<, <= Menor, menor o igual
>, >= Mayor, mayor o igual
&& Y lógico (AND)
|| O lógico (OR)

Comprueba la jerarquía de prioridades de estos operadores

Inferencia Estadística Introducción al lenguaje R 58 / 95


Ejecución condicional: if

Orden if :
if (expr1) expr2 else expr3
x<-5
if (x<10) {
print("El número es menor que 10")
}
Orden ifelse. Es una versión vectorizada de la anterior:
ifelse (condicion,a,b)
y<- 0:5
y.logy<-ifelse(y>0,y*log(y),1)
round(y.logy,3)

Inferencia Estadística Introducción al lenguaje R 59 / 95


Bucles: for, repeat y while

Bucle for :
for (nombre in expr1) expr 2
n <- 50
x <- vector( ) # inicializamos el vector
z <- vector( ) # inicializamos el vector
for(i in 1:100) {
x[i] <- mean(rexp(n, rate = .5)) #rexp random generator
exponencial distribution
z[i] <- (x[i] - 2)/sqrt(2/n)
}

Inferencia Estadística Introducción al lenguaje R 60 / 95


Bucles: for, repeat y while

Bucle while:
while (condicion) expr
Bucle repeat. Esta orden solo se para con un break.
repeat expr
break fuerza la finalización de una iteración. Es la unica forma de
finalizar un ciclo repeat.
next dentro de for, while o repeat fuerza el comienzo de una
nueva iteración.

Inferencia Estadística Introducción al lenguaje R 61 / 95


Bucles: for, repeat y while

Bucle while:
i <- 5
while ( i > 0 ) {
print( "¡Perfecto mundo!" )
i <- i - 1
}
Bucle repeat. Esta orden solo se para con un break.
x <- 1
repeat {
print(x)
x = x+1
if (x == 6){
break
}
}
Inferencia Estadística Introducción al lenguaje R 62 / 95
Familia apply

El uso secuencial lleva en ocasiones a bucles innecesarios que


sólo consiguen ralentizar la ejecución de una función.
En R es recomendable evitar el uso de bucles cuando se puede
utilizar alguna función de la familia apply.
Veamos a continuación ejemplos de funcionamiento de las
funciones apply, sapply, tapply y lapply.

Inferencia Estadística Introducción al lenguaje R 63 / 95


Evaluando funciones con la familia apply

apply(x,margin,fun,...) aplica la función fun a x en la dimensión


indicada (margin=1 fila y margin=2 columna) .
lapply(x,fun,...) aplica la función a todas las componentes de la
lista.
Para hacer lo anterior simplificando el resultado en una estructura
de vector utilizaremos sapply(x, fun, ...).
Si queremos aplicar una función a unos valores seleccionadas a
traves de los niveles de un factor utilizaremos tapply(x, INDEX,
fun = NULL,...,simplify=TRUE)

Inferencia Estadística Introducción al lenguaje R 64 / 95


apply

Ejemplo apply
(X <- matrix(1:10,nrow=2))
mediafila <- numeric(2)
for (i in 1:2){
mediafila[i] <- mean (X[i,])
}
mediafila
apply(X, 1, mean)
apply(X,2,sum)
apply(X,2,sqrt)

Inferencia Estadística Introducción al lenguaje R 65 / 95


apply

Incluyendo funciones propias


apply(X,1,function(x) x^2+x)
[,1] [,2]
[1,] 2 6
[2,] 12 20
[3,] 30 42
[4,] 56 72
[5,] 90 110

Inferencia Estadística Introducción al lenguaje R 66 / 95


Ejercicio

Ejercicio
Introduce los siguientes datos en R
 
2 1 3
 5 6 1 
2 7 4

Calcula el mínimo por fila usando apply.


Calcula la posición del mínimo por fila usando apply sobre una
función creada.
Calcula el mímimo por fila sin usar apply, con bucles.

Inferencia Estadística Introducción al lenguaje R 67 / 95


Ejemplo sapply

Diferencias entre lapply y sapply


ejemplolista <- list(nombre="Pedro", casado=T,
esposa="Maria",no.hijos=3,
edad.hijos=c(4,7,9))
lapply(ejemplolista,length)
sapply(ejemplolista,length)

Inferencia Estadística Introducción al lenguaje R 68 / 95


tapply

tapply
> tapply(iris$Sepal.Length,iris$Species,
function(y) sum(log(y)))
setosa versicolor virginica
80.41027 88.86595 94.03272
> tapply(iris$Sepal.Length,iris$Species,
function(y) log(y)+2)
$setosa
[1] 3.629241 3.589235 3.547563 3.526056 3.609438 3.686399 3.526056 3.609438
[9] 3.481605 3.589235 3.686399 3.568616 3.568616 3.458615 3.757858 3.740466
[17] 3.686399 3.629241 3.740466 3.629241 3.686399 3.629241 3.526056 3.629241
[25] 3.568616 3.609438 3.609438 3.648659 3.648659 3.547563 3.568616 3.686399
[33] 3.648659 3.704748 3.589235 3.609438 3.704748 3.589235 3.481605 3.629241
[41] 3.609438 3.504077 3.481605 3.609438 3.629241 3.568616 3.629241 3.526056
[49] 3.667707 3.609438

Inferencia Estadística Introducción al lenguaje R 69 / 95


Diseño de Funciones en R

Inferencia Estadística Introducción al lenguaje R 70 / 95


Funciones en R

Las funciones son objetos que operan sobre unos argumentos


dados y que devuelven uno o varios valores.
La sintaxis es:
nombrefuncion<-function (arg1,arg2,...) {expr}
La llamada a la función será:
nombrefuncion(arg1,arg2,..)
args(nombrefuncion) devuelve los argumentos de una función.

Inferencia Estadística Introducción al lenguaje R 71 / 95


Funciones en R

Si en la consola escribimos el nombre de una función definida en


R sin paréntesis se nos muestra el código fuente.
sd
Si la función tiene más de una definición, R nos avisará que la
función consiste en una llamada a UseMethod:
mean
En tal caso, para conocer las definiciones asociadas a la función,
utilizaremos methods:
methods(mean)
Si sospechamos que la función que queremos es por ejemplo,
mean.default, solicitamos su código fuente:
mean.default

Inferencia Estadística Introducción al lenguaje R 72 / 95


Funciones en R

Primer ejemplo: suma


misuma<-function(x,y) (x+y)
Otro más: mif1
mif1 <- function(x,y){
z <- x*y*rnorm(5)
print(z)
}
mif1(2,3)

Inferencia Estadística Introducción al lenguaje R 73 / 95


Funciones en R

Ejercicio
Define una función que calcule la cuota de una hipoteca según la
siguiente fórmula (The New S Language. Becker/Chambers/Wilks),
donde M es el monto otorgado, i es la tasa de interés y p es el plazo
del préstamo
i
1200
c=M i
1 − (1 + 1200 )−12p

Inferencia Estadística Introducción al lenguaje R 74 / 95


Argumentos por nombre y valores determinados

Los argumentos deben darse por el orden en el que han sido


definidos.
Pero cuando los argumentos se dan por nombre,
‘nombre=objeto’, el orden es irrelevante.

#equivalentes:
hipoteca(100000,6,20)
hipoteca(Monto=100000,interes=6,plazo=20)
hipoteca(100000,interes=6,20)
hipoteca(plazo=20,interes=6,Monto=100000)

Inferencia Estadística Introducción al lenguaje R 75 / 95


Valores de Retorno

Si queremos que una función devuelva algún valor, debemos


especificarlo en el cuerpo de la función.

nombrefuncion <- function(arg1,arg2){


inst1
inst2
...
inst3
return (valor_de_retrono)
}
x<-nombrefunction(arg1,arg2)

x<-min(3,4) min(3,4)

Inferencia Estadística Introducción al lenguaje R 76 / 95


Funciones Predefinidas de Control y Parada

Inferencia Estadística Introducción al lenguaje R 77 / 95


Funciones de control y parada

R nos permite utilizar funciones para controlar y parar el


funcionamiento de una función.
Si detectamos un error no grave podemos utilizar
warning(“mensaje”)
Si usamos stop(“mensaje”) nos mostrará el mensaje de error y
deja de evaluar la función
Con missing(arg) se indica de modo lógico si el argumento no ha
sido especificado

Inferencia Estadística Introducción al lenguaje R 78 / 95


Funciones de control y parada

mifactorial <- function(n){


if(n < 0){
stop(’El argumento "n" debe ser positivo’)
} else {
return(factorial(n))
}
}

Inferencia Estadística Introducción al lenguaje R 79 / 95


Gráficos en R

Inferencia Estadística Introducción al lenguaje R 80 / 95


Gráficos en R

Existen multitud de funciones para realizar gráficos con R.


El resultado de una función gráfica es enviado a un dispositivo
gráfico o ventana.
Se distinguen funciones de alto nivel, que crean nuevas gráficas y
de bajo nivel, que añaden elementos a un gráfico existente.
Dentro de las librerías gráficas podemos nombre lattice, grid o
ggplot2.
Podemos empezar viendo algunos ejemplos de gráficos:
demo(graphics)

Inferencia Estadística Introducción al lenguaje R 81 / 95


Funciones gráficas básicas

plot(x, y ) escribe el gráfico bivariado de x en el eje X y de y en el


eje Y.
hist y boxplot realizan histogramas y diagramas de cajas para
variables numéricas.
barplot y piechart dibujan diagramas de barras y sectores para
variables cualitativas.
qqplot para representar los cuartiles de y respecto a los de x.
plot.ts y ts.plot para datos de series temporales.

Inferencia Estadística Introducción al lenguaje R 82 / 95


Opciones y argumentos

Las opciones y argumentos de cada función se encuentran en la


ayuda correspondiente.
Algunas opciones comunes a las funciones básicas son:
main y sub: inserta título y subtítulo
xlab e ylab: proporciona títulos a los ejes
add: por defecto toma el valor FALSE, si es TRUE superpone el
gráfico al ya existente.
xlim e ylim delimitan los límites de los ejes
type identifica el tipo de gráfico (‘p’ puntos, ‘l’ líneas, ‘b’ puntos
conectados por líneas, etc
lty cambia el tipo de línea
lwd personaliza el ancho de las línas
pch símbolos utilizados en la gráfica

Inferencia Estadística Introducción al lenguaje R 83 / 95


Comandos de bajo nivel

Comandos de bajo nivel: añaden información a los gráficos.


points(x,y): añade puntos
lines(x,y): añade curvas
abline(a,b): añade recta de corte a y pendiente b
abline(h=y): recta horizontal de altura igual a y
abline(modelolineal): añade recta de regresión de un modelo lineal
legend(x,y,legend): añade una leyenda en la posición (x,y)

Inferencia Estadística Introducción al lenguaje R 84 / 95


Parámetros gráficos

Podemos especificar las opciones gráficas dentro de las propias


funciones, o bien, a través de par.
La instrucción op <- par(no.readonly = TRUE) guarda los
parámetros por defecto, que pueden ser modificados a través de
par y posteriormente restablecidos (par(op)).
Si optamos por este último caso los cambios en los parámetros
gráficos se aplican hasta el final de la sesión.
par() #muestra la configuración actual
opar <- par() # hacemos una copia
par(col.main="orange")# título en naranja
hist(consumo)
par(opar) #restableciendo parámetros
Revisar la ayuda help(par) para conocer las opciones disponibles.

Inferencia Estadística Introducción al lenguaje R 85 / 95


Parámetros gráficos

bg se utiliza para el color del fondo.


adj para la justificación del texto respecto al borde izquierdo (0 a
la izquierda, 0.5 centrado, 1 a la derecha y más de 1 mueven el
texto más a la izquierda)
cex controla el tamaño de textos y símbolos (cex.axis aplica a los
números de los ejes, cex.lab a las etiquetas de los ejes, cex.main
al título, etc)
las se utiliza para la orientación de las etiquetas de los ejes (0
paralelo a ejes, 1 horizontal, 2 perpendicular a los ejes y 3
vertical).
mfrow y mfcol: un vector c(a,b) divide la ventana gráfica en a filas
y b columnas. Las gráficas se dibujan por fila o por columna
respectivamente.
colors() lista los colores disponibles.

Inferencia Estadística Introducción al lenguaje R 86 / 95


Parámetros gráficos: símbolos
Escribir ?pch para obtener una descripción de los símbolos
disponibles.

Inferencia Estadística Introducción al lenguaje R 87 / 95


Ejemplo con plot
x <- rnorm(20)
y <- rnorm(20)
#gráfico básico:
plot(x,y)
#gráfico personalizado:
plot(x, y, xlab="20 números al azar",
ylab="Otros más...",
xlim=c(-2, 2), ylim=c(-2, 2),
pch=22, col="mediumblue",
bg="lightsteelblue2", bty="l",
main="Personalizar grafico", cex=1.5)

Inferencia Estadística Introducción al lenguaje R 88 / 95


Ejemplo con plot

plot(Petal.Length,Petal.Width,col="blue",
main="Diagrama dispersión",xlab="Longitud pétalos",
ylab="Ancho pétalos", pch=20)
abline(lm(Petal.Width~Petal.Length),lwd=2.5,col="red")
text(3,0.6,expression(paste("R"^"2", "=0.927")))

Inferencia Estadística Introducción al lenguaje R 89 / 95


Dispersión según niveles de un factor

library(lattice)
data(iris)
xyplot(Petal.Length ~ Petal.Width,groups= Species,
xlab=names(iris)[4], ylab=names(iris)[3],
main="Dispersión según grupo",
auto.key=list(space="top", columns=3))

Inferencia Estadística Introducción al lenguaje R 90 / 95


Histogramas y diagramas de cajas

#equivalente a plot(Species,Sepal.Width)
boxplot(Sepal.Width~Species)
par(mfrow=c(2,2))
hist(Sepal.Width, main = "Por defecto",xlim=c(2,4.5))
hist(Sepal.Width, breaks = 20,
main = "Fijando el número de clases (20)",
xlim=c(2,4.5))
hist(Sepal.Width, breaks = 20,
main = "Coloreado",
col= c( "red", "yellow", "purple"),xlim=c(2,4.5))
hist(Sepal.Width, breaks = 20,
probability = TRUE,,xlim=c(2,4.5),
main = "Probabilidad en lugar de frecuencia")

Inferencia Estadística Introducción al lenguaje R 91 / 95


Histogramas y diagramas de cajas

Inferencia Estadística Introducción al lenguaje R 92 / 95


Diagramas de barras con acero.rda
Primero leer el conjunto de datos ????
Diagrama por defecto:
barplot(table(temperatura))
Diagramas agrupados:
a <- table(temperatura,averias)
barplot(a,beside=TRUE,legend=rownames(a),
col=c("darkblue","red","yellow"))
barplot(a,legend=rownames(a),
col=c("darkblue","red","yellow"))

Inferencia Estadística Introducción al lenguaje R 93 / 95


Gráficos de sectores
frec <- c(10, 12, 4, 16, 8)
lbls <- c("US", "UK", "Australia", "España", "Francia")
pct <- round(frec/sum(frec)*100)
lbls <- paste(lbls, pct) # add percents to labels
lbls <- paste(lbls,"%",sep="") # ad % to labels
pie(frec,labels = lbls,main="Sectores")

Inferencia Estadística Introducción al lenguaje R 94 / 95


Matriz de diagramas de dispersión

pairs(acero[1:4], main = "Matriz de dispersión",


pch = 21, bg = c("red","blue")[averias])

Inferencia Estadística Introducción al lenguaje R 95 / 95

También podría gustarte