Parte I
Introduccién al lenguaje RIntroduccion al lenguaje R
Res un lenguaje y entorno de programacién, creado en 1993 por Ross Ihaka y Robert
Gentleman de! Departamento de Estadistica de la Universidad de Auckland, cuya caracteristi-
ca principal es que forma un entorno de analisis estadistico para la manipulacién de datos, su
célculo y la creacién de gréficos. En su aspecto R puede considerarse como otra implementacién
del lenguaje de programacién S, con la particularidad de que es un software GNU, General
Public Licene (conjunto de programas desarrollados por la Free Software Foundation), es decir,
de uso libre.
La pagina principal del proyecto “R — project” es http: //www.r — [Link], en ella
podremos conseguir gratuitamente el programa en su tiltima versién, o cualquiera de las ante-
riores (para el caso de utilizar paquetes no implementados para las tiltimas versiones), ademés
de manuales, librerfas o package y demas elementos que forman la gran familia que es R.
Hay que tener en cuenta R es un proyecto vivo y sus capacidades no coinciden totalmente
con las de S.A menudo el lenguaje $ es el vinculo escogido por investigadores que utilizan la
metodologia estadistica, y R les proporciona una ruta de cédigo abierto para la participacién
en esa actividad, los usuarios pueden contribuir al proyecto implementando cualquiera de el-
las, creando modificaciones de datos y funciones, librerias (packages),... Ningwin otro programa
cn la actualidad retine las condiciones de madurez, cantidad de recursos y manejabilidad que
posee R, ademas de ser el que en los tiltimos afios ha tenido una mayor implantacién en la
comunidad cientificaIntroduccién al lenguaje R
Entre otras caracteristicas dispone de
Alnacenamiento y manipulacién de datos.
Operadores para
cAleulo sobre variables indexadas (Arrays), en particular matrices.
Hermamientas para anélisis de datos.
Posibilidades gréficas para andlisis de datos.
El término entorno lo caracteriza como un sistema completamente disefiado y coherente de
anilisis de datos, Como tal es muy dinémico y las diferentes versiones no siempre son total-
mente compatibles con las anteriores. En la introduccidn a R no se hace mencién explicitamente
ala palabra estadistica, sin embargo mayoritariamente se utiliza R como un sistema estadisti-
co, aunque la descripeién més precisa seria la de un entomo en el que se han implementado
muchas técnicas estadisticas. Algunas estén incluidas en el entorno base de Ry otras se acom-
pafian en forma de bibliotecas (packages).
Una diferencia fundamental de la filosofia de R, y también de la de S, con el resto del
software estadistico es el uso del “objetos” (variables, variables indexadas, cadenas de carac-
teres, funciones, etc.) como entidad basiea. Cualquier expresién evaluada por R se realiza en
una serie de pasos, con unos resultados intermedios que se van almacenando en objetos, para
ser observados o analizados posteriormente, de tal manera que se puede hacer un anélisis sin
necesidad de mostrar su resultado inmediatamente produciendo unas salidas mfnimas.
Cada objeto pertenece a una clase, de forma que las funciones pueden tener comportamion-
tos diferentes en funcién de la clase a la que pertencce su objeto argumento. Por ejemplo no
se comporta igual una funcidn cuando su argumento es un vector que cuando es un fichero de
datos u otra funcién
Resté disponible en varios formatos: en cédigo fuente esté escrito principalmente en C' (y
algunas rutinas en Fortran), esencialmente para maquinas Unix y Linux, 0 como archivos
binarios precompilados para Windows, Linux(Debian, Mandrake, RedHat, SuSe), Macintosh
y Alpha Unix.
Junto con R se incluyen ocho bibliotecas o paquetes (llamadas bibliotecas est4ndar) pero
otros muchos estén disponibles a través de Internet en ([Link] Actual-
mente se encuentran disponibles 2337 librerias (packages) desarrollados en R, que cubren mul-
titud de campos desde aplicaciones Bayesianas, financieras, graficacién de mapas, wavelets,
anélisis de datos espaciales, etc. Esto es lo que define R como un entorno vivo, que se actualiza
con frecuencia y que esta abierto a la mejora continua,
Podemos ver o modificar la lista de bibliotecas disponibles mediante la funcién "JibPaths"
y conocer ol camino a la biblioteca predeterminada del sistema La variable “Library”. Estas
bibliotecas se pueden clasificar en tres grupos: las que forman parte del sistema base y estarén
en cualquier instalacién, los paquetes recomendados (aunque no forman parte del sistema hase
Contreras J.M., Molina E. y Arteaga P.Introduccién al lenguaje R 4
se aconseja su instalacién) y otros paquetes desarrollados por investigadores de todo el mundo
para tareas o métodos de lo més diverso. Destacando areas nuevas como ciencias de la salud,
epidemiologia, bioinformética, geoestadistica, métodos gréficos, ete
Una caracteristica del lenguaje R es que permite al usuario combinar en un solo programa
diferentes funciones estadisticas para realizar anélisis més complejos. ademés los usuarios de
R tienen a su disponibilidad un gran mimero de programas escritos para Sy disponibles en la
red la mayorfa de los cuales pueden ser utilizados directamente con R.
Contreras J.M., Molina B. y Arteaga P.Parte II
Primeras nocionesPrimeras nociones
Una ver instalado el programa, la forma mas facil de usarlo es de forma interactiva mediante
Ja Iinea de comandos. Cuando R se inieia, aparece la ventana del programa “Gui” (graphical
user interface) con un mensaje de apertura.
Debajo del mensaje de apertura de la consola de R se encuentra el “prompt” que es el
simbolo “>” (mayor que). Las expresiones on R se escriben directamente a continuacién del
“prompt” en la consola de R. Si se escribe e intenta ejecutar un comando que se ha escrito en
forma incompleta, el programa presenta un “+” que es el prompt de continuacién.
Una caractoristica de R es que nos permite guardar la sesién de trabajo, lo que nos sera muy
itil en el caso de que necesitemos utilizar bibliotecas o datos que ya hemos implementado. Al
cerrar el programa o al teclear “g( )” nos preguntard si desea salvar los datos de esta sesién
de trabajo. Puede responder yes (Si), no (No) o cancel (cancelar) pulsando respectivamente
las letras y, n oc, en cada uno de cuyos casos, respectivamente, salvaré los datos antes de
terminar, terminaré sin salvar, o volverla a la sesién de R. Los datos que se salvan estarén
disponibles en la siguiente sesién de R.
Es importante saber que el nombre de un objeto debe comenzar con una letra (A-Z 6 a-z) y
ademés puede incluir letras, digitos (0-9) © puntos (.). R discrimina entre letras mayisculas y
mintisculas para el nombre de un objeto, de tal manera que x y X se refiere a objetos diferentes
(inclusive bajo Windows)Primeras nociones 7
Conceptos iniciales.
Funcién help (ayuda)
Rees un lenguaje funcional, esto es, realiza las tareas a través de funciones. La primera fun-
cién que necesitamos conocer es la que nos proporciona la ayuda del programa, esta es “help”
Siescribimos help aparece la definicién de la funcién help, la cual nos seré titil conocer si quer-
‘emos realizar alguna modificacién en ella. Pero si lo que queremos es obtener el resultado de la
funcién, debemos escribir entre paréntesis el conjunto de argumentos que quiere suministrar a
Ja misma, o vacio si lo que se quiere es que aparezca la ayuda sin mis. Una forma alternativa
a ésta funcién es poner el cardcter ? delante del elemento que queremos consultar
> help(nean)
Cuando queremos consultar funciones especificadas por caracteres especiales, el argumen-
to debera ir entre comillas para transformarlo en una cadena de car Por ejemplo:
help(“[[”). Otra forma de realizar la misma accién es con la funcién “[Link]( “median”
> [Link]("calibration"
Una opeién interesante de la ayuda es que podemos encontrar ejemplos de uso. La forma
de ejecutar los ejemplos es escribiendo “example( J” o “demo )” si se quiere una demostracién
concreta. Por ejemplo con la sentencia “example(InsectSprays)" obtenemos una muestra de
imagenes de diferentes graficas que podemos realizar con los datos InsectSprays
Contreras J.M., Molina B. y Arteaga P.Primeras nociones 8
Otra opcién muy stil de R es la ayuda a través de internet, si tecleamos “[Link]( )”
apareceré en un navegador una ayuda en formato HTML con una informacién mas actual
‘También podemos utilizar el buscador “[Link]” , que al mas estilo google nos propor-
ciona todo el material publicado en la red sobre el tema buscado.
Asignaciones
Al igual que ocurre con otros lenguajes de programacién R asigna nombres a las opera-
ciones. Esto lo conseguiremos mediante el simbolo “< —”, “— >” 6
Como para poder visualizar un dato renombrado hay de escribir el nombre después de
haberlo asignado, es siti] utilizar los “;” después de la asignacién para ahorrarnos espacio, pero
no es bueno abusar de ello por que serfa mas dificil interpretar cédigos mas extensos.
Hay que tener en cuenta que R utiliza determinados términos para referirse a algunas fun-
ciones por lo que lo mejor es evitar esos nombres a la hora de las asignaciones, por ejemplo “e’
se utiliza para crear vectores 0 “¢” que calcula la traspuesta de un conjunto de datos (vectores,
matrices, dataframe,...), pero si nos confundimos no es dramitico, ya que podemos arreglarlo
Habitualmente a la hora de nombrar objetos en programacién no existen reglas definidas
pero se suele seguir una cierta pauta, por ejemplo se suele nombrar marcos de datos (dataframes)
con la inicial en mayiscula, pero las variables siempre en miniscula. Si varias funciones hacen
cosas parecidas a objetos distintos, se separan con “” (0 més fil usando clases)
> rnorm(6)->x
[1] 0.1964489 -0.5514473 0.2333607 1.1652428 0.4284878 0.5159063
> X<-rnora(5)
>x
[1] ~0.482520857 -0.951955735 1,537756423 0.839669367 0.772915316
> yous; y
(1) 123 45 6 7 8 910111213 1415
function (,.., recursive = FALSE) .Primitive("
> cc1i3
i123
En el caso que necesitemos poner notaciones o comentarios en R, estos se realizan poniendo
delante del comentario el simbolo “4#”. Recuerde la importancia de estos para explicar lo que
estamos haciendo o simplemente recordar de que trata el programa o funcién que estemos
implementando.
> tHlola
> HEgpera que todo esto te sea util
Contreras J.M., Molina B. y Arteaga P.Primeras nociones 9
Paquetes
Como ya hemos hablado antes, R consta de un sistema base de librerfas y de un conjunto
de paquetes adicionales que extiendon su funcionalidad.
En esta seccién vamos a ver como se anexan (“instalan”) los paquctes adicionales. Tenemos
que tener en cuenta que la instalacién depende del sistema operativo con el que funcionemos
Segiin el sistema operativo que utilicemos tenemos varias formas distintas de instalar un
paquete:
El método més sencillo consiste en es hacerlo directamente desde R, mediante la funcién
“install packages( )”. Desde una ventana del sistema o desde Inicio-Ejecutar... Remd IN-
STALL paquete. Y por tiltimo desde la interface de XEmacs
Otra forma es descargar el archivo en formato zip (en el caso de windows), [Link] (linux)
© tgz (en el caso de Mac) desde la web de Re instalarlo en el directorio “R/.../library
‘También podemos instalar un libro en cualquier otro directorio del ordenador e indicarle el
camino del directorio mediante la funcién “library( “a” ,libloc = “C : /...")*, siendo “a” el
nombre que le daremos a la biblioteca y * C : /...” In ruta hacia ella. (no es recomendable)
aunque la forma mas comtin es desde el menti Paquetes — > Instalar paquete(s) desde archivos
Zip locales... scleccionaremos la libreria descargada y directamente se anexaré en el programa.
Si nuestro sistema operativo es Linux, tenemos dos formas distintas de instalar un paquete
La forma més cémoda es mediante los comandos “install packages( )* 6 “update. packages( )
‘También nos permiten instalaslos si no eres root en este caso debemos especificar el “[Link].”
R CMD INSTALL paquete-x.y.z. [Link], permite instalar paquetes, aunque uno no sea un root
(especificar el directorio).
Después de haber instalado la libreria en el programa, para poder utilizarla debemos de
cargar el paquete. Esto lo vamos a hacer de la siguiente manera:
La forma més comnin es mediante desde el mentt Paquetes — > cargar paquete.... apare-
cer una lista con todos las librerias instaladas y nos pedir que instalemos una de ellas,
simplemente seleccionando una la tendremos operativa
Con Ia funcién “search( )" podemos ver los libros que hay actualmente en memoria y con la
funcién “library( J” una lista con los “R packages available” (librerias disponibles). Si dentro
de los paréntesis ponemos el nombre de una de ellas, se cargaré para su uso (apareceré en
segunda posicién cl la lista de libros en memoria)
> search()
[1] ".Globaienv" “package:stats” “package :graphics”
[4] "package:grDevices" "package:utils" "package datasets”
[7] "package:methods" “Autoloads" “package: base”
Contreras J.M., Molina B. y Arteaga P.Primeras nociones 10
> Library
> Library (sampling)
> search()
(1) *.G1obatenv"
[a] “package: ¥ASS"
(7) “package igrDevice
(10) “package:methods"
‘package:sanpling" "package: 1pSo1v.
‘package:stats" ackage graphics’
Funciones Is y rm
La funcién Is saca en pantalla los objetos almacenados en la memoria por el usuario, aunque
sélo muestra los nombres de los mismos. Si se quiere listar solo aquellos objetos que contengan
un cardcter en particular “ls(pat =)" (usamos la opcién “pattern”, que se puede abreviar como
“pat”) y para restringir la lista a aquellos objetos que comienzan con este cardcter utilizamos el
simbolo exponente “Is(pat =")”. Tenga en cuenta que es recomendable conocer los elementos
que R tiene en memoria, aparte de los que hemos memorizado nosotros. Esto se consigue con
Ja orden “Is(9)". La funcién “[Link]( J” muestra algunos detalles de los objetos en memoria.
Al igual que antes la opcidn pattern se puede usar de la misma manera con [[Link]( ).
Otra opcidn itil en esta funcién es “[Link]” que especifica el nivel de detalle de vi-
sualizacién de objetos compuestos. Hay que tener en cuenta que “[Link]{ )” muestra todos
los detalles de los objetos en memoria, incluyendo las columnas de los marcos de datos (data,
frames), matrices y listas, lo cual puede generar una gran cantidad de informacién. Podemos
evitar mostrar todos estos detalles con la opeién “[Link] = —1”
> nombre<-"pepe"; x1<-5; x2<-100; b<-0.5
> 1s0
[1] "b" nombre" "xt" "x2"
> 1s(pat="b")
[1] "" ‘nombre
> s(pats""b")
Tad be
> [Link])
bi: nun 0.5
nombre : chr "pepe"
xi: mun
x2: mum 100
> B < data. frane(xt,x2,b)
>B
xi ob
1 § 1000.5
> [Link](pat="B")
B: ‘data. frane! 1 obs. of 3 variables
$xt: nun 5
$ x2: mun 100
$b: mun 0.5
Para borrar objetos almacenados en la memoria, utilizamos la funcién “rm()", por ejemplo
rm(z) climina el objeto x; rm(z,y) elimina ambos objetos x e y, y “rm/(list = Is( })” elimina
todos los objetos que estén en la memoria. Tenga en cuenta que las opciones mencionadas para
Ja funcion [s( ) pueden aplicarse para borrar selectivamente algunos objetos
Contreras J.M., Molina B. y Arteaga P.Primeras nociones
ul
> rm(nombre)
> 180
[A "or wpe mat 2"
> tHlenos borrano
> rm(List=1s(pat
> 180
(1
> BHenos borrano las asignaciones que empiezan por x
> rm(liste1s())
> 180
character (0)
> filenos borrano todo
Funcién library
La funcién library gestiona los libros de la biblioteca, dando informacién sobre los exis
tentes y
funciones, datos y document:
gindolos en memoria o descargéndolos de la misma. Un libro esté. formado por
én; todos
subdirectorios, con informaciones diversas, de acuerdo con un formato establecido. De hecho,
al cargar R, se carga al menos un primer libro denominado base.
ellos contenidos en un directorio que contiene varios
Por ejemplo “library()” devuelve una lista de los libros que hay en la biblioteca prede-
terminada de R. “library(help=“base")" devuelve una pequeiia ayuda sobre el libro base. Si
consultamos la lista de biisqueda observaremos los libros que hay actualmente en memoria.
> Library)
Packages in Library ’C:/PROGRA™1/R/R-210"1.1/Library?:
agricolae Statistical Procedures for Agricultural Research
akine Interpolation of irregularly spaced data
animation Denonstrate Animations in Statistics
base The R Base Package
bitops Functions for Bitwise operations
boot Bootstrap R (S-Plus) Functions (Canty)
caTools Tools: moving window statistics, GIF, Base64, ROC AUC, etc
class Functions for Classification
cluster Cluster Analysis Extended Rousseeuy et al
> search()
[1] ".Globaienv" “package:stats" "package:graphics" "package:grDevices"
[5] "package:utils" _“package:datasets" "package: methods"
[8] "Autoloads" "package base"
“package: stats
“package graphics
> # Carganos el paquete prob
> Library (prob)
> # Mhora aparece segundo en 1a lista
> search()
[1] *.Globalene” ‘package:prob"
(5) “package:grDevices" "package:utils*
“package :datasets
Contreras J.M.
Molina E. y Arteaga P.12
[8] "package:methods" "Autoloads' "package base"
> # Venos 1a informacién del paquete prob
> Library (help=prob)
Information on package "prob?
Description
Package prob
Version 0.9-2
Date 2009-1-18
Title Elenentary Probability on Finite Sample Spaces
Author: G. Jay Kerns <[Link]>
Maintainer: G. Jay Kerns <[Link]>
Depends
Suggests: conbinat, £AsianOptions, hypergeo, VGAM
LazyLoad no
La funcién “JibPaths” permite ver o modificar la lista de bibliotecas disponibles, que es
una vector de cadenas de caracteres. La variable “Library” contiene el camino a la biblioteca
predeterminada del sistema.
Operaciones con nimeros reales y complejos:
Res un lenguaje interpretado, es decir podemos escribir drdenes y R las ejecutard inmedi-
atamente.
De hecho puede utilizar R como una calculadora, ya que es capaz de manejar todas las
operaciones elementales: suma, resta, multiplicacién, divisién, exponenciacidn, division entera
y médulo, que se realizan mediante los simbolos: + ,-,*, /,°, % /%y %%
Es importante saber que R no evalia una expresién hasta que tiene la corteza de que se
ha terminado su escritura. Si la expresién comienza con un paréntesis, deberemos corrar la
expresién con otro paréntesis sino se consideraré que no terminé Ja accién, igualmente con
corchetes, llaves ete. En general, para cualquier funcién, su escritura sin los paréntesis indica
al lenguaje que debe devolver la definicidn, en tanto que al incluir paréntesis, le indica que
intente ejecutarla.
cone calculadora
Contreras J.M., Molina E. y Arteaga P.Primeras nociones 1B
> 15/4
(11 3.75
> 3-4
(11 8:
># Cociente de 1a division
> 181/14
ts
># Recto de la divisin
> 1814
is
También podemos hacer los mismos ¢
divisién entera
imaginaria.
Iculos con niimeros complejos (menos las operaciones
médulo), en este caso utilizaremos la letra “i” para referimnos a la parte
> (343i) +(-3424)
[1] 0-83
> (2421)*(344)
Error: objeto ‘i’ no encontrade
> # La unidad imaginaria i tiene que ir acompafiade de un coeficiente
> (2421)*(3+11)
(a) asi
> 3431-3421
[1] 05a
> (2124) (3411)
[1] 0,840.41
> (24DiVM/M3*1A)
Error: operacién compleja no implementada
R proporciona funciones para hacer todo tipo de operaciones basicas: sumas, senos, cosenos,
raices,
= sum()) Suma de los elementos
= sqrt() Rai euadrada,
= abs() Valor absoluto,
= sin( ), cos( ), .. . Funciones tigonométricas,
= log), exp() Logatitmo y exponencial
+ roundt }, signif( ) Redondeo de valores muméticos.
> seq(t, 9, by = 2)
“liss7e
> rep(1:3,3)
(123123123
> sgre(6t)
an
> abs(-9)
is
> sin(-24pi)
(1) 2.449213:
> Log(100)
[1] 4.60517
Contreras J.M., Molina E. y Arteaga P.Primeras nociones
4
> exp(3)
[1] 20.08554
> round(2.345632)
(2
> round(2.3456432, 3)
(31 2.346
> signif (2.345432, 3)
(1) 2.35
Operadores Comparativos y Légicos:
‘Los operadores comparativos y légicos son muy importantes a la hora de programar funciones ya que gracias
a ellos podemos podremos hacer distinciones de datos, agrupaciones, ete. Veamos tuna pequeiia introduccién
de ellos:
Los operadores compara
tivos o de relacién interaccionan sobre cualquier tipo de elemento devolviendo uno
© varios valores légicos, Siempre nocesitan dos elementos (a < 6) para poder actuar,
Los operadores I6gicos pueden actuar sobre uno 0 dos objetos de tipo légico, y pueden devolver uno (0
varios) valores Igivos.
Relacién, Légicos
mayorque | | x&y | conjuncién |
menor igual que) | x &e&ey | igual (+) |
mayor oigual que) = zly | disyuncién |
igual } | zily | igual) |
diferente or(e,y) | O exclusive (+4)
(+) Si se escriben dos simbolos repetidos, estos tienen el mismo significado que si apareciese uno, pero la
diferencia consiste en que se
‘que se pudiera calcular la ex
climsinar errores.
(++) Da como valor verd
Para comparar “totalme
cevalda primeto la parte de la izquierda y, si ya se sabe el resultado (suponiendo
;esin de la derecha) no se sigue evaluando, por lo que pueden ser mas répidos y
iadero si uno y s6lo un argumento es valido.
into” dos objetos es necesario usar la funcin “identical{ )”
> # Asignames a x el valor 10
> x<-10; x
(1) 10
> # Le preguntamos si x
> x6
[1] FALSE
> # Le preguntanos si x
> s5
[4] TRUE
> # Le preguntanos si x
> xen5
[1] FALSE
> # Le preguntamos si x
> xi=5
[1] TRUE
es menor que §
es mayor o igual que §
vale 5
es distinto de 5
Contreras J.M., Molina B. y Arteaga P.Primeras nociones 15
# Creamos dos vectores
yerU:3) 26-3:
4 Le preguntanos si son iguales
identical (y,2)
[1] FALSE
> # Vemos les elenentos que coinciden
>¥
[1] FALSE TRUE FALSE
> # Renombranos x ey
> x15
> ysre(2,4,3,6,5)
[1] FALS® FALSE TRUE FALSE TRUE
> xisy
[1] TRUE TRUE FALSE TRUE FALSE
> xbxesyl
3s
> xlxt=y]
L124
Los vectores légicos pueden utilizarse en expresiones atitméticas, en cuyo cago se transforman primero en
vectores numéricos, de tal modo que F se transforma en 0 y Ten 1
En légica una conjuncién, &, es un “entunciado con dos o més elementos simultsneos", Una Mmpara eléctri-
ca se enciende si hay corriente eléctrica, el interruptor esta conectado y el fusible esta bien, en cualquier otro
aso la lampara no se encenderé, En cambio la disyuncién es un “enunciado con dos 0 més elementos opta-
tivos”, Por ejemplo “Puedes leer este manual o imprimirlo”, es una disyuncién con dos elementos, mientras
‘que “puedes leer este manual, imprimitlo o editarlo” es una disyuncién con tres elementos.
Para dos entradas A y B, la tabla de verdad de la funcién conjuncién y disyuncién son las siguientes:
> Asc CTRUE, FALSE) 5A
(1) TRUE FALSE
>in
[1] FALSE TaUE
> Bec (TRUE, TRUE) ;B
(1) TRUE TRUE
> xor (A,B)
[1] FALSE TRUE
Days
> ARB
[1] TRUE FALSE
> ALB
[1], TRUE
>HhOB
>ALB
[1] TRUE TRUE
>AILB
(1) TRUE
> Podenos comparar los elenentos x ¢ y creados anteriormente con:
Contreras J.M., Molina B. y Arteaga P.16
FALSE FALSE TRUE FALSE TRUE
[1] FALSE FALSE FALSE FALSE FALSE
> xboy)
integer(0)
> # No lo forma ningun elenent
> xix]
1124
> # Son los elenentos de x que cumplen la condicién
> yboy]
rnuneric(0)
> xLxcry]
1112345
Contrer
M., Molina E. y Arteaga P.Parte III
Manipulacién de DatosManipulacién de Datos
Operaciones con Vectores.
El primer tipo de objeto que mancjaremos es el vector (coleccién ordenada de clementos del mismo tipo)
Podemos escribir vectores de varias maneras, utilizando la opcién =” (el vector comienza en el primer niimero
suministrado y finaliza en el segundo o en un niimero anterior sin sobrepasazlo, tanto en orden ascendente
‘como descendente) 6 mediante Ia funcién de concatenacién “e )
> alo
4) 1234567 8 910
> 10:1
(10987654321
3.5 4.55.5 6.57.5
> 6(1:5,2,4,-3)
[1] 123 4 5 2 4-3
Tenemos formas adicionales de crear vectores, Una de las ms comunes es utilizando la funcién “seq(a,b,¢)”
‘que genera secuencias de mimeros reales, donde el primer elemento indicaria el principio de la secuencia, el
segundo el final y el tercero el incremento que se debe usar para generar la secuencia, Aunque también podemos
poner la funcién de estas formas “seq(length = d, from = a, to = 6)" 0 “seq(by = ¢, from = a, to = 6)” siendo
“a? Ta Tongitud del vector
> seq(1, 10,2)
13579
> seq(from = 1, to = 20, by =2)
(1) 13 5 7 $1113 184719
> seq(1, 10,2)
13579
> seq(trom
13879
> # Si lo que querenos es 6 elenentos
> seq(from = 1, to = 10, length =6)
[1] 1.0 2.8 4.6 6.4 8.2 10.0
> Con el argunento along creazos un vector con los indices del vector al que Llanenos
> x<-e(1,2,1,3,4)
to = 10, by =2)
> ye25
> seq(along-y)
18Manipulacin de Datos 19
icant
La funcién “rep(a, 6)” que crea un vector con “b” elementos idénticos al valor “a”
> # repetimos el elenento 3 diez veces
> rep(3, 10)
(1) 3333333333
> # repetimos el vector "
> aci:5; rep(a,2)
(1234512345
> # repetimos cada elemento del vector 3 veces de 5 en 5
> rep(1:3,rep(5,3))
(i) 111112222233333
> yerrep(2,5)
> # repetimes cada elenento de "a" tantas veces cone indica "y
> rep(a.y)
(1122334455
> rep(a,a)
(17122333444455555
> xe-2
5 veces
La funcién “sequence( )” que crea una secuencias de enteros. Cada secuencia terminaré en el nimero
‘especificado como argumento,
> sequence (c(3,2))
G12312
> # Hemos creado una secuencia del vector 1:3 y del 1:2
> sequence(c(5,3))
(1)12345123
> # Hemos creado una secuencia del vector 1:5 y del 1:3
> sequence (c(c(2,3),3))
I) 12123123
> # Henos creado una secuencia del vector 1:2, 1:3 y del 1:3
La fancién “gl( )” (generador de niveles) genera series regulares de factores, Tine l (a, 6)" donde
1a” es el niimero de niveles (0 clases) y “b” es el miimero de réplicas en cada nivel. Se pueden usar dos opciones:
‘ength’ para especificar el mimero de datos producides, y “labels” para especificar los nombres de los factores
> # Repetimes los dos niveles 6 veces con la etiqueta Hombre y Mujer
> g1(2, 6, labels = c("Hombre”, "Yujer"))
(1) Hombre Honbre Hombre Hombre Honbre Hombre Mujer Mujer Mujer Majer
(11) Majer Majer
Levels: Hombre Mujer
> # 20 elementos de dos niveles primero uno y luego el atro
> gh(2, 1, 20)
(i) 12121212121212121212
Levels: 1 2
> # 20 elementos de dos niveles los dos a la vez
> gh(2, 2, 20)
(i 11221122112211221122
Levels: 1 2
Contreras J.M., Molina E. y Arteaga P.Manipulacin de Datos 20
Finalmente, “expand grid{ )” crea uma tabla de datos con todas las combinaciones posibles de los elementos
de los vectores 0 factores que proporcionemos como argumentos
> expand. grid(edad=c(36,25), pes:
edad peso sexo
(75,60), sex:
136 75 Hombre
2 2 78
336 60
4 25 OH
5 36 75
6 25 75
7 36 60
8 25 60
> # Crea todas las combinaciones posibles
R puede escribir vectores con caracteres o mimeros, pero siempre entiende los elementos como si fuesen del
‘mismo tipo.
Un vector siempre esté formado por elementos del mismo tipo, no pueden mezelarse miimeros y cadenas de
‘caracteres (se transformarfa en cadenas de caracteres). Del mismo modo, si mevcla ntimeros reales y complejos,
se entenderian como complejos.
> e("Hola", "Adios’
[1] "Hola" "Aaios'
> c(t, 192i)
[a] 1403 1424
> c(1-1i, 2)
[1] 1-13 2403
> [Link]
Martes™,"Miércoles",
jueves", "Viernes" , "Sébado", "Domingo")
[1] "Lunes' "Martes" — "Miércoles'
(7) "Domingo
jueves" “Viernes” —"Sabado"
‘Una opeidn de R es que podemos asignar nombres a los elementos de un vector mediante la funcién
“names” (también se podrd utilizar para nombrar cualquier objeto).
> eeuT
I) 1234567
> names(x)<-c( "Lunes", "Martes","Miercoles", "Jueves", "Viernes", "Sabado", "Doningo")
>x
Lunes Martes Miercoles Jueves. Viernes © Sabado Domingo
1 2 3 4 5 6 7
‘También podemos conocer o cambiar el modo o tipo de los elementos que forman el vector mediante
Ia funcién “mode” (tomaria los valores: logical, numeric, complex, character, null, list, function, graphics,
expression, name, frame, raw y unknown)
> yé-seq(from=3, toril, by=2)
>y
i] 3s 7 ou
> mode(y)
[1] "numeric®
> # Cambiamos y a complejo
> mode(y)<-"complex"
oy
[1] 3404 5+0i 740i 940i 12404
Contreras J.M., Molina E. y Arteaga P.Manipulacién de Datos a
IR como ocurnfa con miimeros reales nos permite operar con vectores (dentro de las propiedades de estos)
Podemos multiplicar vectores por escalares, vectores por vectores, potencias, sumas .. Teniendo el cuenta el
‘uso del paréntesis y el miimero de elementos del vector, ya que nos Ievaria a diferentes resultados e incluso a
‘xtores si no son miltiplos los tamatios entxe si.
> (4:5)*(2:6)
[1] 2 6 12 20 30
> (1:5)°2
[1] 1 4 8 16 25
> 1:5°2
(1) 1 2 3 4 5 6 7 & 91011 12 13 14 15 16 47 18 19 20 21 22 23 24 25
> (1:5)(2:6)
Error: tentativa de aplicar una no-funcién
> (1:5)+(2:6)
i) 36 7 91
> (1:5)4(2:4)
Li ss768
Mensajes de aviso perdidos
In (1:5) + (2:4)
Longitud de objeto mayor no es miltiplo de la longitud de uno menor
Una de las opciones que hay que tener més euidado es la potencial, ya que ademés de las formas en la que
se puede escribir, también podemos elevar un vector a otro (en este caso debemos tener e cuenta el tamayio de
‘cada uno),
> (1:8)-3
[1] 1 8 27 64 125
> (4:5)7(1:3)
i) 1 427 425
Mensajes de aviso perdidos
Tn (1:5) (1:3)
Longitud de objeto mayor no es miltiplo de 1a longitud de uno menor
> (4:5)7(1:5)
(1) 1427 256 3125
> (4:5)7(1:10)
a 1 4 27 2863125 1 128 6561 262144 9765625,
La longitud de wn veetor puede obtenerse con la funcién “length” que sirve ademés para defini Ia longitud
ol vector, haciéndolo més largo o mas corto, En caso de hacerlo més largo, so completaré con NA (valores
faltantes).
> je4
>3
tha
> length(3)
(4
> # Asigno a j una longitud igual a
> Length (j)<-5
> Length(3)
(a1
>3
[1] 4 WA NA KA MA
> j)<-e("Pepe", Paco")
>i
Contreras J.M., Molina B. y Arteaga P.Manipulacién de Datos 2
[1] "Pepe" “Paco”
> Length (3)
(12
> # Asigno a jj una longitud igual a 5
> LengtnGy
i
(21 "Pep
"Paco" WA MAMA,
Podemos referimos a un elemento que ocupa la posicién “i” de un vector x", mediante "x{i]" 0 referirnos
a un subconjunto mediante un subconjunto de subindices. Si los subindices son miimeros naturales, hacen
referencia a las posiciones dentro del vector. $i los subindices son valores I6gicos, se corresponcen con los
‘mismos elementos del vector, pero slo hacen referencia a los que tienen un subindice con valor légico TRUE,
> aac-(1:6)°3
[1] 1 8 27 64 125 216
> aals)
(3) 128
> aalc(1,3,5))
[1] 1 (27 128
> # Asignanos el sexo a tre
> sexoc-e("Mujer", "Mujer",
[1] "Mujer" "Mujer" "Hombre"
> # Asignanos el nombre a tres elementos ordenados
> nombre<-c("Pepa" , "Pepita", "Pepe")
> nombre
[1] "Pepa" "Pepita" "Pepe"
> # Preguntanos cual de los elementos son mujeres
> sexo==Mujer
Error: objeto ‘Mujer? no encontrado
> # si es un caracter tiene que ir entre
elementos ordenados
Hombre")
(2) TRUE TRUE FALSE
> # Quiero solo los nombres de las majeres
“wajer")
“Pepiza®
Un factor es un vector de cadenas de caracteres que sirve pata representar datos categéricos, aunque no
solo incluye estos valores sino que también los diferentes niveles posibles de esta variable.
El atributo “levels” indica los valores numéricos posibles (es decir los caracleres diferentes que aparecen
en el vector). Se utiliza, por ejemplo, para dividir una poblacién en grupos.
La fancién “factor” se utiliza para codificar un vector como un factor. Creando tantos niveles como le
indiquemos.
> # Tres niveles
> factor(1:3)
L123
Levels: 123
> # Cinco niveles
> factor(1:3, levels=1:5)
L123
Contreras J.M., Molina B. y Arteaga P.Manipulacién de Datos 23
Levels: 12345
> # Tres niveles con etiquetas
> factor(1:3, labels=c("A", "BY,"
ilape
Levels: ABC
> # Un vector de dos elenentos con cuatro niveles
> aac-factor(c(2,3) ,levels=2:5)
> aa
G23
Levels: 2345
> levels(aa)
TA) "2" 8g" qe age
> factor(e(“Mujer", "Mujer", "Hombre"))
[1] Mujer Mujer Hombre
Levels: Hombre Mujer
> Levels (factor (c("Mujer", "Mujer", "Hombre")))
[1] "Hombre" "Mujer"
»
Con la opeidn “exclude’
inecesitemos ¥ con
por ejemplo “factor(1 : 5, exclude = 4)" excluimos los valores de los niveles que
yrdered” especificamos si los niveles del factor estan ordenades.
> # Cinco niveles excluyendo el cuarte
> factor(1:5, exclude=4)
I). 2 3 aps
Levels: 1235
Un error muy comin os utilizar variables aparentemente numéricas en anilisis estadisticos, por ejemplo n°
telefénicos o eddigos postales. Por ello antes de utilizar un vector con caracteres cualitativos o cuantitativos
dentro de un anélisis, hace falta convertirlo en un factor.
Existen funciones que nos permiten convertir diferentes clases de objetos a modos diferentes. Una situacion
frecuente es la conversion de factores a valoxes numézicos. En este caso, R realiza la conversién usando las
expresiones “[Link]? y “[Link]”. Para realizar la conversién manteniendo los valores literales del
factor, primero se debe convertir a cardcter y después a numérico, Este procedimiento puede ser bastante stil
sien un archivo una variable numérica también tiene valores no-numéricos.
> ¢.pe-e(18002, 18194, 18199)
>ep
[1] 18002 18194 18199
> mode(c.p)
[1] "numeric"
> [Link]<-factor(c.p)
> codigo postal
[1] 18002 18194 18199
Levels: 18002 18194 18199
> f<-facter(e(1,3))
>t
13
Levels: 13
> [Link](t)
12
> # No ha guardado los valores
> # Para guardarlos prinero lo convertinos en carécter y luego en numérico
> [Link](as. character (f))
13
Contreras J.M., Molina B. y Arteaga P.Manipulacién de Datos
24
A continuacién tenemos una tabla con un conjunto de funciones muy stiles a la hora de trabajar con
vvectores!
macani)
median(x)
sum(x)
max(x)
rmin(x)
range(x)
vvar(x)
cov(x)
cor(xy)
sort(x)
rank(x)
order(x)
quantile(x)
‘cumsum(x)
cumprod(x)
curmmax(x)
pmin(xyyz)
Media aritm
Mediana de los valores del vector x
Suma de los valores del veetor x
Maximo valor de los valores del veetor x
Minimo valor de los valores del vector
Rango de los valores del vector x
‘Cuasivarianza de los valores del vector x
covarianza de log valores del vector x
Coeficiente correlacién entre los vectares x y y
Una version ordenada de x
Vector de las filas de los valores en x
Indica la posicién que tendrian los valores ordenados de x
Minimo, primer cuartil, mediana, tercer cuartil y maximo de x
Vector formado por la frecuencia acumulada del vector x
Vector formado por el producto acumulado del vector x
Vector de x tal que cada valor menor se sustituye por el anterior
Vector de x tal que cada valor mayor se sustituye por el anterior
Vector de longitud igual al més largo de x, y 0 2,
formado por los valores maximos de cada posicién
Vector de longitud igual al més largo de x, y 0 2,
formado por los valores minimaos de cada posicisn
jca de Tos valores del vector x
Un ejemplo en el que podemos ver el comportamiento de cada una de las funciones:
> xe-e(1,2,3,4,5)
> yere(1,3,3,1,5)
> 2e-e(1,3,3)
> mean(x)
is
> median(x)
ts
> sum(x)
[1] 15
> max(x)
ts
> min(x)
ia
> range(x)
Gas
> # La cuasivarianza muestral
> var(x)
(1) 2.8
> # Veamos que
> melength(x)
> sum((x-mean(x))°2)/(n-1)
(1) 2.8
> # La varianza seria
> C(t) /n) evar Go
i 2
> sum((Gr-mean(x))°2)/(n)
i) 2
Contreras J.M., Molina B. y Arteaga P.Manipulacién de Datos Ey
> # La cuasicovarianza
> cov(x,y)
td 1.8
> sun((x-mean(x))#(y-mean(y)))/(n-1)
G18
> # La covarianza seria
> C(t) /n)¥cov x,y)
(1) 1.2
> sum((x-mean(x))*(y-mean(y)))/(n)
(1) 1.2
> cor(x,y)
[1] 0.5669467
> sore(x)
1112345
> sore(y)
111335
> rank()
1112345
> rank(y)
[1] [Link] 3.5 1.5 5.0
> ordery)
(114235
> quantiles)
O% 25% 50% 75% 100%
1°92 3 4 5
> cunsun(y)
(i) 14 7 813
> cunproa(y)
ti] 139 945
> cummax(x)
(1112345
> cummins)
i)atiis
> peax(x,y,2)
1113345
> prin(x,y,2)
1112313
Operaciones con Matrices
Las matrices o variables indexadas (Arrays) son generalizaciones multidimensionales de veetores. De hecho,
son voctores indexados por dos o més indices y que se imprimen de modo especial. Para creatlas wtslizamos la
funcién “matrix
‘Los pardmotros principales de esta funcidn son: data (vector que contiene los valores que formardn la
‘matriz), nrow (aimero de flas), neol (niimero de columnas)
> mi<-matrix(1,2,3)
> al
Ga) Gal 631
loot 44
(2 tor o4
> # Henos formado una matriz de unos de dos filas y tres columas
Contreras J.M., Molina E. y Arteaga P.Manipulacién de Datos 26
> # Tenenos que tener en cuenta el tamao de la matriz
> mo-matrix(1:4,3)
Mensajes de aviso perdides
In matrix(1:4, 3) =
1a longitud de los datos [4] no es un submiltiplo o milviplo del numero de filas [3] en la matriz
> ma<-matrix(1:4,2)
> m2
Ga) G2
Gl 13
2) 2 4
> m2<-matrix(1:8,4)
> a2
Ga) Gl
Ll 15
lo 2 6
Bl 3 7
Il 4 8
> # Henos formado una matriz con el vector 1:8 de cuatro filas
> m3¢-matrix(1:8,ncols4)
> m3.
Gal G2) G3) Gal
J 1 3 5 7
2] 2 4 6 8
> # Hemos formado una matriz con el vector 1:8 de cuatro columas
Si quiere dar nombres a las colurmnas (0 a las filas) puede hacerlo asignando valores al parémetro “dim-
‘names’, lista con los nombres de las flas y las columnas. Las componentes de la lista deben tener longitud 0
fo ser un vector de cadenas de caracteres con la misma longitud que la dimensién de la mateiz,
> # Renonbranos las columas
> matrix(1:9,3,3,dim=List (c() ,c("AL"
AL AD AS
i) 147
2) 258
(3) 3 6 9
> # Renombranos las filas
> matrix(1:9,3,3,dim-List (c("at","a2","a3") ,¢(0))
Ga) G2) Gal
a1 4 7
a2 205 8
a3 3 6 8
> # Renombranos filas y columnas
> matrix(1:9,3,3,dimeList (c("ai", "a2" ,"a3") ,0("AI","A2","A3")))
293")
AL AD AS
al 147
9225 8
a3 3 6 9
Una operacién muy comin es hacer referencia a una submatriz o a un elemento de la matriz, se realiza
indicando los fndices de los elementos a los que se hace referencia. Podemos hacer referencia a una fila (vector)
mediante matriz[i, |, con i el indice de la fla que queremos mostrar, o a una columna mediante matri2{ ,j]
con j ol indice de la columna que queremos mostrar. Si lo que queremos ¢s un elemento concreto indicamos los
dos indices matriz[i , por ejemplo con matriz(2, 1), que da cl valor 2° de la 1* variable que coincide con el
1° valor de la 2* variable. Un argumento vit en estas operaciones es la variable légica “byrow” que indica si la
matria debe construirse por filas o por columnas (el valor predeterminado es F).
Contreras J.M., Molina B. y Arteaga P.Manipulacin de Datos 27
> # Introducimos los datos, peso, altura, edad.
> datos<-c(70, 108,82,1.80,2.06,1.98,27,19,32)
> mn<-matrix (datos ,ncol=3,dimnames=List (c("Peso" , "Altura", "Edaa") ,c()) ,byrow
# Con byrow=T le hemos dicho que lea primero por filas
Ga) G2) 31
Peso 70.0 108.00 82.00
Mtura 1.8 2.06 1.98
Edad 27.0 19.00 32.00
> me<-matrix(datos,ncol=3,dimnane: dad") ,<() ,byrow=F)
> # Con byrow=F le hemos dicho que lea primero por colunas, con lo que no se muestra correctanente
1 6,21 63)
Peso 701.80 27
Altura 108 2.06 19
Edad = 82:1.98 32
Podemos realizar operaciones con matrices de la misma forma que lo hacfamos con los vectores, es decir
componente a componente: suma, resta, multiplicacién por escalares, multiplicacién elemento a elemento,
divisién clemento a elemento, exponenciacisn, divisidn entera y médulo, que se realizan mediante los simbolos:
with Ki hy %%
> Mig-matrix(1:6,2,3)
> Mt
Gal G2) 63
il 1 305
2] 2 4 6
> Mog-matrix((1:6)°2,2,3)
> M2
Gal G2) 631
J 4 925
(2) 4 16 36
> mieH2
Ga) G2) G3)
(1) 2 12 30
[2] 6 20 42
> # He sumado componente a componente
> MieH2
Ga) G2) 63)
(4) 1 27 125
[2] 8 64 216
> # He multiplicade componente a componente
> moat
Gal G2) 631
I] 1 0305
Bl 2 4 6
> # He dividido componente a componente
Gal G2) 3)
iJ 0 0 Oo
J 9 0 oO
> moe(3:6)
G1) G2) G3
(1) 3 4575
Contreras J.M., Molina E. y Arteaga P.Manipulacién de Datos 2%
[2,] 16 96 144
Mensajes de aviso perdides
In M2 * (3:6)
Longitud de objeto mayor no es miltiplo de 1a longitud de uno menor
> moe (1:2)
Ga) G2) G31
iJ 4 9 25
[2] 8 32 72
‘También es posible realizar el producto matricial mediante el operador "% * 6".
> Atg-matrix(1:6,2,3)
>A
Gal G2) G3)
J 4038 5
2] 2 4 6
> Biematrix(1:12,3,4)
> BI
Ga) G2) G3) G4
il 1 4 7 40
2) 2 5 8 4
Bl) 3 6 9 42
> ALLeIBL
Gal G2) G3) G4
[1] 22 49 76 103
[2] 28 64 100 136
> BiLeKat
Error en Bi Y#/ AL: argumentos no compatibles
> # Hay que tener en cuenta las dimensiones de las matrices
La funciéa “crossprod” devuelve el producto matricial eruzado de dos matrices (la traspuesta de la primera
‘atria, multiplicada por la segunda). $i no especifia segunda matriz, Ra toma igual a la primera, con lo que
obtiene X"X.
> Atg-matrix(1:6,2,3)
> Ade-matrix(c(1,1,2,3) ,2)
>A
Gal G21 G31
J 40305
2) 2 4 6
> crossproa(A1)
Ga) G2) G3)
iJ 5 a a7
[2,) 11 25 39
(3) 17 39 61
> crossprod(A1,,A2)
Ga) Gl
2 3 8
2) 7 18
[3] 11 28
La funcién “outer” realiza el producto exterior de dos matrices (o veetores) sobre una fancién dada,
‘También puede usarse en forma de operador mediante % 0%, en cuyo caso la funcidn utilizada es el producto.
Contreras J.M., Molina B. y Arteaga P.Manipulacién de Datos 29
> xe-LiS
> yeu.s
> outer(x,y)
Gal
i) 13
(2) 2.6
(3,] 3.9
(4) 5.2
(5) 6.5
> xhely
Gal
il 13
(2) 2.6
[3] 3.9
[4] 8.2
[51 6.5
‘Mediante la funcién “1( )" caleulamos la matriz traspuesta,
>A
Ga) G2) Gal
2 4 3 5
Il 2 4 6
> ean)
Ga G2
2 102
Rl 3 4
Bl 5 6
La funcién “diag( J? se puede usar para extracr © modificar la diagonal de una matriz o para construir
‘una mattiz diagonal
> mi<-matrix(1,nr=2,nc=2)
> al
Ga) G2
I o1 4
Bl ot 4
> mo<-matrix(2,nr#2,nc#2)
> m2
Gal G2
J 20 2
2) 2 2
> H Uninos las dos matrices por filas
> rbind(mt,n2)
Ga) G2)
)oo1 4
Bl o1 4
Bl 2 2
4) 2 2
> # Uninos las dos matrices por colunnas
> cbind(mt,n2)
Gal G2) G3) 4)
I] 4 2 202
Il 1 + 2 2
Contreras J.M., Molina B. y Arteaga P.Manipulacién de Datos 30
> diag(nt)
iad
> diag(n2)
(22
> dieg(mt)=15
> mt
Ga) G2)
i) 45 4
(2) 1 38
> # Creanos una matriz diagonal de orden 4
> diag(a)
Gal Gal Gal Gal
2 1 0 0 0
2) 0 1 0 0
Bl 0 0 1 0
> ve-e(10, 15,20)
> diag(v)
Gal G2) 631
[4] 10 0 0
2] 0 i 0
(3) 0 0 2
> dieg(3.6,nr=2,nc=5)
Gal G2) G3) G4) G5)
I] 3.6 0.0 0 0 0
[2] 0.0 36 0 0 oO
> # También podenos operar
> diag (rbind (mt m2) %e/icbind (m1 ,n2))
[1] 226 226 8 8
La funcién “solve” invierte una matrix (si se le da un argumento) y resuelve sistemas lineales de ecuaciones
(cuando se le dan dos) El primer argumento es una matriz que debe ser cuadrada no singular, y el segundo
argumento (opeional) es un weetor © matriz de coeficientes. También podemos utilizarla para resolver sistemas
de ecuaciones (por ejemplo x + 2y = 1, x + 3y = 2), pasando el sistema a forma matricial
> a2
Ga) G2)
Il 1 2
Bl 1 3
> biee(1,2)
> bi
12
> selve(A2)
Ga G2
I] 03-2
lo +a 4
> solve(A2,bi)
Gt
La funcién “eigen” calcula los autovalores y autovectoves de una matriz cuadrada, el resultado es una Lista
de dos componentes lamadlos values y vectors. Con la funcién “det” calculamos el determinante de una matriz
cuadrada, Ademés existen funciones como sud{ ) que calcula la descomposicisn uv
> a2
Contreras J.M., Molina B. y Arteaga P.Manipulacién de Datos
al
Gal G2
Lg 102
2] 1 3
> eigen(A2)
Svalues
[3] 3.7320508 0. 2679492
Svectors
Gu G2)
[1,] 0.880680 -0.9390708
[2,] -0.8068982 0.3437238
> det (a2)
aa
> sva(a2)
sa
[1] 3.8643285 0.2587772
su
Ga Gal
[1,] -0.8760484 -0.8174156
[2,] -0.8174155 0.5760484
sv
Ga G2)
[1,] -0.3605967 -0.9327218
[2,] -0.9327218 0.3605967
Una opcién interesante es construir mat
uniendo otras matrices, esto lo conseguimos con las funciones
“chind()” y “rbind()” que las une horizontalmente (modo colurana) o verticalmente (modo fila) respectivamente.
> xig-matrix(1:5,nr=3,n0=5)
> xt
Ga) G2) G3) G4) G5)
4) 1 4 2 5 3
2) 2 5 3 1 4
B) 3 1 4 2 8
>
> ixcmatrix(e(1:5,3:1) ,are3,ne=2)
>a
Ga) G2
il 1 4
Bl 2 5
Bl 3 3
> # Uno xl y i por columas
> xlic-ebind(xt,3)
> xii
Gal G2) G3) Gal Gs) Gel G71
J 4 4 205 38 4 4
2] 2 5 3 1 4 2 5
J 3 1 4 2 5 3 3
> # Uno x1 y x2 por filas
> xtle-rbind (xt, x1)
> xil
Contreras J.M., Molina B. y Arteaga P.Manipulacién de Datos 32
Gal G2) G3) Gal Os)
IJ 1 4 205 38
2] 2 5 3 1 4
BJ 3 1 4 2 5
Jo o1 4 2 5 3
iJ 2 5 3 1 4
i) 3 1 4 2 6
Aunque en principio no estén relacionadas las matrices con las tablas de frecuencias a partir de factores,
podemos utilizar las primeras para expresar las segundas. Hemos visto que un factor define una tabla de
entrada simple. Del mismo modo, dos factores definen una tabla de doble entrada, y asi sueesivamente. La
funcién “table( )” caleula tablas de frecuencias a partir de factores de igual longitud. Si existen k arguments
ccategéricos, el resultado seré una variable k-indexada, que contione la tabla de frecuencias
> aec(1,3,2)
> bel.3
> be:3
> table(a,b)
»
arrays (Variable multiindexada).
La goneralizacién de los vectores y matrices son las variables multiindexadas, denominadas arrays, y de
las cuales son casos particulares los vectores y matrices. Una variable indexada (array) es una coleccién de
datos, por ejemplo numérivos, indexados por varios indices. R. permite crear y manipular variables indexadas,
por ejemplo para crear una variable multiindexada se utiliza la funcién “array(data, dim, dimnames)” donde
im” es un vector de dimensiones. Ademés podemos hacer referencia a cualquier subconjunto de la misma,
de modo similar a las matrices
> # array se conporta de la misma manera que matrix
> xt
Ga) G2) G3) G4) Gs)
Il 1 4°25 3
2) 2 5 3 1 4
Bl 3 1 4 2 5
> x2
Gal G2) G3) G4) Osi
J 1 4 2 5 3
Bl 2 5 3 1 4
i] 3 1 4 2 5
> ig-array(c(1:5,3:1) ,dimc(3,2))
Ga) G2)
1 4
2) 2 6
GB) 3 3
> 2gcarray(1:5,¢(2,3,3))
Contreras J.M., Molina B. y Arteaga P.Manipulacién de Datos 33
rod
Gal G21 G31
J 40305
2] 2 4 4
v2
Ga) G2) G3)
IJ 20 4 4
2) 3 5 2
18
Ga) G2) 63)
4] 3 6 2
Bl 4 1 3
> 2l1,,]
Ga) G2) Gl
il 1 0203
Bl 3 4 5
i] 5 1 2
> 201,1,]
i123
> 2l1,1,1]
Una variable indexada puede utilizar no solo un vector de indices, sino incluso una variable indexada de
indices, tanto para asignar un vector a una coleccién irregular de elementos de una variable indexada como
para extraer una coleccidn irregular de elementos.
La funcién “aperm’” permite trasponer una variable multiindexada indicando la propia variable como primer
argumento y el vector de permutaciones de indices como segundo,
> xé-array(1:6,dim=c(2,3))
Gal G2) G3i
J 10385
2] 2 4 6
> xteaperm(x,c(2,1))
> xe
Gu ta
i) /1 2
@) 3 4
GB] 5 6
Listas.
Una lista se construye con la funcién list que devuelve un objeto de tipo lista con tantos componentes como
argumentos se le suministren y es utilizado para devolver el resultado de una funcién,
> dies, senana=c("Lunes"
> [Link]
‘Martes" ,"Miercoles", "Jueves", "Viernes", "Sabado" ,"Domingo")
[1] "Lunes! "Martes" "Miercoles" "Jueves" "Viernes" "Sabado"
[7] "Domingo
> list (A=dias semana,
SA
[1] "Lunes" "Martes" “Miercoles" "Jueves" "Viernes" "Sabado"
Contreras J.M., Molina B. y Arteaga P.Manipulacién de Datos 34
[7] "Domingo"
$B
t]1234567
Puede referitse a cada uno de los elementos de la lista de dos formas distintas: $i tiene nombre, como en
este caso, mediante el nombre de la lista, el simbolo $ y el nombre del elemento. En cualquier caso, siempre
puede referirse a 61 mediante el indice de posicién entre dobles eorchetes,
> List ([Link],B=1:7)$4
[1] "Lunes" "Martes" —"Miércoles" "Jueves" "Viernes" "S4bado" "Domingo"
> List (A=[Link],B=1:7)$B
11234567
> List ([Link],B=1:7) ([2]]
111234567
> List (A=[Link],8=1:7) ((11]
[1] "Lunes" —"Martes" —"Miércoles* "Jueves" “Viernes” "Sabado" "Domingo"
La diferencia fundamental entre las tres formas, (, [| y $ es que la primera permite seleccionar varios
‘lementos, en tanto que las dos tiltimas solo permiten scleccionar uno. Ademés, $ no permite utilizar indices
caleulados. Fl operador [[ necesita que se le indiquen todos los indices (ya que debe seleccionar un sélo elemento)
‘en tanto que [ permite obviar indices, en cuyo caso se seleccionan todos los valores posibles. Si se aplican a una
lista, [[ devuetve el elemento de la lista especificado y | devuelve una lista con los elementos especificados.
> listal<-list (Aedias
> Listaz<-list (listat ,¢:
> listal
SA
[1] "Lunes" "Martes" "Miercoles" "Jueves" "Viernes" "Sabado" — "Domingo"
jenana,B=1:7)
Mola", D=matrix(1:8,2))
$B
[1234567
> Lista2
Cc)
Ct4lisa
[1] "Lunes" "Martes" —"Miercoles" "Jueves" "Viernes" "Sabado" "Domingo"
(r11sB
ii)1234567
sc
[3] "Ho1a"
Ga) G2) G3) G4
Il 1 3 5° 7
2) 2 4 6 8
> Lista2((1])
sa
[1] "Lunes" "Martes" —"Miercoles" "Jueves" "Viernes" "Sabado" — "Domingo"
$B
Contreras J.M., Molina B. y Arteaga P.Manipulacién de Datos 35
I) 1234567
> Lista2{(3])
Gal G2) G3) Gal
J 1 03 5 7
2) 2 4 6 8
> 1astaz{(3}] [2,4]
ie
Hoja de datos ([Link]).
Una hoja de datos (Data frame) es una lista que pertenece a la clase “data frame”
Hay restrieciones en las listas que pueden pertenecer a esta clase, en particular: las componentes deben
ser vectores (numéricos, cadenas de caracteres, o I6gicos), factores, matrices numéricas, listas w otras hojas de
datos. Las matrices, listas, y hojas de datos contribuyen a la mueva hoja de datos con tantas variables como
ccolumnas, elementos o variables posean, respectivamente,
Los vectores numéricos y los factores se incluyen sin modificar, los vectores no muméricos se fuerzan a
factores cuyos niveles son los tinicos valores que aparecen en el vector. Los vectores que constituyen la hoja de
datos deben tener todos la misma longitud, y las matrices deben tener el mismo tamafo.
La diferencia fundamental con la matriz de datos es que este objeto no tiene por qué estar compuesto de
elementos del mismo tipo. Los objetos pueden ser veetores, factores, matrices, listas e incluso hojas de datos.
> datosi<-data. frame (Peso=c(90, 120,56), Altura=c(1.90,1.87,1.70))
> datost
Peso Altura
1 90 1.90
2 120 1.87
3 56 1.70
> datos2<-data. frame (datesl, Sexo-c("ombre!
> datos?
Peso Altura Sexo
1 90 1,90 Hombre
2 120 1.87 Hombre
3 56 1.70 Mujer
"Hombre" ,"Mujer"))
Este vector se puede transformar en un factor. Es importante identificar el uso de corchetes individuales 0
dobles ya que implica diferencia en los resultados.
> is. vector (datos!)
[1] FALSE
> is,matrix(datost)
[1] FALSE
> is,[Link](datost)
(1) TRUE
> is. factor (datost(2))
[1] FALSE
> is. factor (datos2( (311)
(3) TRUE
> dates2(3]
Contreras J.M., Molina B. y Arteaga P.Manipulacin de Datos 36
Sexo
1 Hombre
2 Hombre
3 Mujer
Para introdueir un vector de nombres como tales, sin transformarlo en factores, debe utilizar la funcién
1).
> nombres<-c("Pepe’
> nombres
[1] "Pepe" "Paco" "Pepita”
> datos3<-data, frame (datos2, Noxbre
> datos3
Peso Altura Sexo Nonbres
1 90 1,90 Hombre Pepe
2 120 1.87 Hombre Paco
3 56 1.70 Mujer Pepita
‘Pepita")
(nombres))
Si desea seleccionar un subconjunto de una hoja de datos, puede hacerlo con la funcién subset. Funcién,
‘que puede utilizar también en vectores.
Para realizar modificaciones en tun data frame es muy util la funcidn ¢ans form,
> datos3
Peso Altura Sexo Nonbres
90 1.90 Hombre Pepe
120° 1.87 Hombre Paco
56 1.70 Mujer Pepita
subset (datos3, select=c (Sexo, Nombres))
Sexo Nonbres
Hombre Pepe
Hombre Paco
Mujer Pepita
subset (datos3, subset=c(Sexo=="Mujer"))
Peso Altura Sexo Nonbres
561.7 Mujer Pepita
transforn(datos3, logPeso1og(Peso))
Peso Altura Sexo Nombres 1ogPeso
90 1.90 Hombre Pepe 4.499810
120 1.87 Hombre Paco 4.787492
56 1,70 Mujer Pepita 4.025352
‘transform (datos3, INC=Peso/(Alzura)"2)
Peso Altura Sexo Nonbres Ime
90 1.90 Hombre Pepe 24.9075,
120° 1.87 Hombre Paco 34.31611
3 86 1.70 Mujer Pepita 19.3716
Tay una serie de funciones que permiten comprobar si un objeto es de un tipo determinado, todas comienzan
por is., 0 cambiar el objeto a un tipo concreto, funciones que comienzan por as.
> x<-1:10
> [Link](x)
[1] TRUE
> [Link](x)
Contreras J.M., Molina E. y Arteaga P.Manipulacin de Datos 37
[1] FALSE
> xé-as. data. frame(x)
> is,[Link](o)
[1] TRUE
La funcién de R “data, frame” concatena todas las variables en un solo conjunto de datos, también pode-
‘mos guardar en un archivo dicho conjunto de datos utilizando la funcién “[Link]”
El formato del archivo guardado es .CSV (comma separated variables, variables separadas por comas), el
‘ual es un formato de texto muy ficil de leer con cualquier editor de texto o con Excel, Bl archivo se puede ser
lefeo en R a través de la fancién “[Link]”
La notacién § para componentes de listas, como por ejemplo “contSdom” , no siempre es la més apropiada.
En ocasiones, seria cémodo que los componentes de una lista o de una hoja de datos pudiesen ser tratados
temporalmente como variables cuyo nombre fuose el del componente, sin tener que especificar explicitamente
el nombre de la lista,
La funcidn “attach( )" puede tener como argurmento el nombre de una lista o de una hoja de datos y
permite conectar la lista o la hoja de datos dizectamente. Supongamos que abe es una hoja de datos con tres
variables, abc$u, abeSv y abeSw.
La orden “attach(abc)”conecta la hoja de datos colocdndola en la segunda posicién de la trayeetoria de
Diisqueda y, supuesto que no existen variables denominadas u, v o w en la primera posicidn; u, v y w aparecersm
‘como variables por si mismas. Sin embargo, si realiza una asignacién a una de estas variables, como par ejemplo
“w= v+w" no se sustituye la componente u de la hoja de datos, sino que se crea una nueva variable, u, en
1 directorio de trabajo, en la primera posicién de la trayectoria de biisqueda, que enmascararé a la variable u
de la hoja de datos, Para realizar un cambio en la propia hoja de datos, basta con utilizar la notacién $, como
en “lentejas$u — v + w", Este nuevo valor de la componente u no seria visible de modo directo hasta que
dosconecte y vuelva a conectar la hoja de datos.
Para desconectar una hoja de datos, utilice la funcién “detach()”. Esta funcién desconecta la entidad que
se encuentre en la segunda posicién de la trayectoria de busqueda. Una vez realizada esta operacién dejaran de
cexistir as variables u, v y w como tales, aunque seguiran existiendo como componentes de la hoja de datos. Las
‘entidades que ocupan en la trayectoria de bisqueda posiciones superiores a la segunda, pueden desconectarse
dando su posicién 0 su nombre como argumento a la funcién “detach”. Aunque es preferimos la segunda opeién,
‘como por ejemplo detach(abe) o detach(" abe"),
Hay que tener en cuenta que la trayectoria de biisqueda puede almacenar un niimero finite y pequelio de
elementos, por tanto no debemos conectar una misma hoja de datos mis de una ves. Del mismo modo, es
conveniente desconectar una hoja de datos cuando termine de utilizar sus variables.
Lectura y escritura de datos.
Una opcién tan interesante como necesaria es la de lectura y eseritura de ficheros de datos. R permite
importar datos desde cualquier tipo de fichero de datos bésico, tal como bases de datos, archivos excel, de
SPSS, de Minitab, de STATA, de documentos de texto, archivos dat, ete. La orden de lectura de datos es
“[Link]”, con ella y con sus argumentos podemos leer los fickeros ¢ indicar el modo en el que ellos estén
construidos. La forma correcta y mas simple de utilizar la orden seria de la siguiente forma “[Link]( “ruta
del archivo/datos1 txt”, header=TRUE, sep=, [Link]="NA", dee="")", con ella estamos diciendo que lea
los datos “[Link].” que se encuentra en tal ruta (separada por /), que dichos datos tienen cabecera, es
docx que existe una primera fila con los nombres de las variables (si no tienen los datos cabecera el argumento
serfa header=FALSE), Con [Link]="NA"le decimos que los valores faltantes los tome como NA (aulos)
El separador decimal de Jos datos que tenemos es el punto en vez de la coma. Hay otros argumnentos que se le
Contreras J.M., Molina B. y Arteaga P.Manipulacién de Datos 38
pueden aliadir a la funciGn tales como indicar el tipo de valores de los datos (ldgicos, enteros, ete) el mimero
de columanas, ete.
> # Leenos el archivo ¢.txt y lo Llane Datos
> Datos <- read. table("C:/Users/jacontreras/Desktop/MALETA/s txt",
eader-FALSE, sep="", [Link]="A", dec=".")
Con la funcién “View visualizamos los datos que hemos cargado en memoria anteriormente,
> View (Dates)
Con “fix” podemos modificar los datos cambiando elementos o afiadiéndotos.
> fix(Datos)
Para escribir datos utilizamos la funcidn “write” con ella podemos crear ficheros a partir de los datos que
‘vamos calculando con R 0 con datos que nosotros vamos introduciendo, Por ejemplo:
> # Con 1a siguiente orden creanos una tabla en blanco a la que nonbranos como Datosi
> Datosi < edit ([Link](NULL))
Contreras J.M., Molina E. y Arteaga P.Manipulacién de Datos 39
‘Vamos a crear dos variables de datos:
> # Vemos si realmente tenenos lo datos
> Datest
vart var?
112
203 4
302 4
4 4 2
5 3 1
> # Venos las columnas y las renonbranos
> Datosi$vari->A
i)13243
> Datosi$var2->B
L)2ai22
>A
113243
>B
Gl2ai24
> # Creamos un fichero vector con 1a suna de los dos elementos
> AeB
GlsT364
> # Le guardamos en un fichero .txt que se llame sunaly3
> write(AsB,"[Link]")
La funcidn write tiene como argumentos los siguientes write(s, file = “data”, neolumns = , append =
FALSE, sep = “"), donde x el nombre de la variable que queremos exportar, file es el nombre y tipo de fichero
‘que crearemos, ncolurans el niimero de coluranas y sep es el separador (en nuestro caso espacios en blanco).
El argumento “append” es el més vita la hora de simulaciones ya que con el podemos conservar los datos
dal fichero que tuviésemos anteriormente si append=TRUE, solo que los nuevos se aBiadirsn a los anteriores en
filas posteriores. Si append = FALSE “machacaremos” los datos anteriores por los nuevos.
Contreras J.M., Molina B. y Arteaga P.Parte IV
FuncionesFunciones
Como hemos visto anteriormente, las funciones permiten realizar las diferentes acciones. Existen funciones
definidas (pueden ser modificadas), pero lo mis importante es que R permite crear objetos del modo fune-
tion, es decir nos permite construir nuevas funciones de R que realicen tareas que no estaban definidas en el
momento de instalar el programa, que ademés pueden utilizar a su vea en expresiones posteriores ganando
considerablemente en potencia, comodidad y clegancia, Estas nuevas funciones se incorporan al lenguaje y se
utilizan posteriormente como las proviamente existentes, Para leer la definicién, basta con escribir el nombre
de la funcién sin paxéntesis
Nota: Para obtener ayuda sobre qué es Jo que hace una funcidn utilizaremos la funcién help. Si necesita
ejecutar un programa del sistema operativo puede utilizar la funcisn system, que permite incluso salir al sis-
tema operativo con Ja orden system “cmd.
Para obtener informacién del sistema utilizamos shell, por ejemplo en shell( “dir”)
Las funciones tradicionales en cualquier lenguaje de uso matemético y estadistico, estan definidas. Entre
clas se encuentran, entre otras, abs, sqrt, sin, cos, tan, asin, acos, atan, exp, log, log10, min, max, sum, prod,
length, mean, range, median, var, cov, summary, sort, rev, order.
> sin(1:5)
[1] 0.841470 0,9092974 0.141200 -0.7568025 -0.9589243
> sin(pi)
[1] 1.2246060-16
> sin(pi/2)
any
> sum(1:6)
(1) 15
> proa(1:6)
[a1 120
Definicién de una funcién
‘Una fancién se define asignando a un objeto la palabra “function” seguida de los argumentos que desee
dar a la funcién, escritos entre paréntesis y separados por comas, soguida de la orden, entre Haves si son varias
érdenes, que desee asignar a la misma, Entre log argumentos destaca que si utiliza tes puntos seguidos,..., ello
indica que el mimero de argumentos es arbitrazio.
nombre < ~ function{argl, arg2,...expresion
La exprosién os una férmula o grupo de férmulas que utilizan los argumentos para caleular su valor. Bl
valor de dicha expresién es el valor que proporciona R en su salida y éste puede ser un simple nimero, un
vector, una gréfica, una lista o un mensaje.
aLPunciones 42
Para definir una funcién debe realizar una asignacién de la forma anterior, donde expresién es una expre
sidn de R que utiliza los argumentos “arg i” para calcular un valor que es devuelto por la funcién,
El uso de la funcién es normalmente de la forma NombreDeFuncion(expr Lexpr 2,..) v puede realizarse
en cualquier lugar en que el uso de una funcisn sea correct,
Ejemplo de creacién de una funcién
> funcié[Link]-function(
+ AB
> funcié[Link]()
(1) 15
> funcié[Link]
function(A=10,,
AB
> funcié[Link](10,3)
[1] 13
> funcié[Link](12,30)
[1] 42
)
La funeién que acabamos de definix no se refiere a la suma de dos mimeros, sino a la sua de dos objetos,
‘que podrin ser vectores, matrices, variables indexadas, etc. Aunque si le asignamos dos valores concretos los
sumard, como hemos visto en el ejemplo anterior
Si desea poner de manifiesto el valor devuelto, puede utilizar la funcidn “return” que termina la funcién
y dovuelve su argumento, Cuando se encuentra esta fancién se detiene la ejecucién y se devuelven los valores
indicados,
primera. funcién<-function(A=1,B=2)
t
Hdevuelve AB
return (A+B)
y
primera. funcién()
Gs
> primera. funcién(2,4)
is
>
Es posible acceder a los argumentos de una funcién mediante la fun«
> #klmacenanos 1os valores actuales en argunentos
> formals (primera. funcién)
SA
(a
$B
(2
> formals (primera. funcién)->argumentos
> argunentos
sa
easy
Contreras J.M., Molina B. y Arteaga P.Punciones 43
$B
i 2
> # Modificanos los valores
> formals (primera. funcién)=alist(X-
> primera. funcién
function (X, ¥
{
1)
return(A +B)
formals(primera. funcién)=argurentos
primera. funcién
function (A= 1, B= 2)
<
;
> # Recuperanos los valores almacenados
return(A + B)
>
‘También podemos acceder al cuerpo de la misma mediante la fancidn “body”
> # Con body almacenanos los valores actuales en cuerpo
> body (primera. funcién)->cuerpo
> cuerpo
<
return(A +B)
# Modificanos los valores
body (primera. funcién)<-expression (M3)
[Link]én
function (A= 1, B= 2)
hes
> # Recuperanos los valores alnacenados
> body (primera. funcién)=cuerpo
> primera. funcién
function (A= 1, B= 2)
“
return(A +B)
}
La orden més interesante para modificar fanciones es “edit”, con ella podemos editar la funcién que
necesitemos y adaptarla a nuestras necesidades.
> edit (primera. funcién)
function (A= 1, B= 2)
<
return(A + B)
y
Aparecerd una ventana editable donde podremos cambiar la orden a nuestro antojo.
i
che Edt Pogue Ay
Contreras J.M., Molina B. y Arteaga P.Punciones 44
Funciones elementales
Como pretendemos que este sea tna introduccién al uso de R sobretodo para su uso estadistico, empezare-
mos con la funcién més comtin en este atca: la media.
Funcién media
Es una funcién de un solo argumento (si no se especifica lo tomaremos por NA (valor mulo)y el resultado
serfa NA). En caso de que se le suministre un argumento, no se comprueba si es vélido 0 no, sino que suponiendo
‘que es un vector, se eliminan del mismo los elementos correspondientes a NA, Para ello se utiliza la nogacién !
y la condicién de ser un valor no disponible
> mediac-function(x=MA)
+f
+ xe-x[[Link](x)]
+ sum(0) Length Go
+)
> media(c(2,4,1,3,6,7))
(1) 3.833333
> media(e(2,4,1,3,6,NA))
(1) 3.2
Aunque R ya tiene implementada como vimos anteriormente la orden “mean” que calcula la media de los
valores que le indiquemos.
> mean(c(2,4,1,3,6,7))
[3] 3.833333
Funcién varianza
‘Tenemos la opcién de calcular la vatianza de dos maneras
La definicién de la varianza poblacional como Varianza = E122!"
Varianza<-function(
{
nc-Length(x)
ve~sum((x~(um(x) /m))“2) /a.
return(v)
}
An)
> Varianza(1:4)
[1] 1.25
> Varianza(c(2,4,1,3,8,7))
[1] 4.472222
Hay que tener en cuenta que R tiene implementada la orden “var” que calcula la variansa muestral 0
‘euasivarianza, por lo que divide por n-1 en vez de por n
> var(e(2,4,1,3,6,7)
[1] 8.368667
Si lo que queremos es calcular la cuasivarianza muestral tenemos que modificar la anterior fanci6n.
Contreras J.M., Molina E. y Arteaga P.Punciones
> Cuasivarianzac-function (x=A)
+f
+ nevLength (x)
+ eve-sum( (x- (sum (x) /n))°2)/(n-1)
+ return(cy)
y
> Cuasivarianza(c(2,4,1,3,6,7))
[1] 9.366667
> var(c(2,4,1,3,8,7))
[1] 9.366667
> # Vemos que anbas coinciden
tra forma de caleular la varianza es mesiante la formula de la relacién entre los momentos,
Koningé-function (x=WA)
¢
ng-Length(x)
‘ve-mean (x"2)~ (mean (x))“2/(n)
return(v)
y
Bo
Koning<-function (x=A)
{
ac-length(x)
vve-sum (x72) /n~ (sum (x) /n)"2
retura(v)
>
> Koning(c(2,4,1,3,6,7))
[1] 4.472222
> Koning(1:5)
2
Pero si lo que queremos es trabajar con “vat” pero queremos que la varianza sea la poblacional lo mejor
es multiplicar por #1
> var (1:8)
(1) 2.8
> # calculanos 1a longitud del vector
> né-Length(1:5)
(6
> var (1:5)*(a-1)/m
i 2
> # Comprobanos que coinciden
> Varianza(1:5)
2
Funcién Desviacién Tipica
La definicién de la Desviacién Tipica poblacional es DT = ¥/
Por tanto la definicién es:
Se,
Contreras J.M., Molina B. y Arteaga P.Punciones 46
> DT<-function (x=NA)
+
+ nccLength(x)
+ ve-sart (sum((x-(sum(x) /n))~2)/n)
+ revurn(y)
+>
> pr(a:3)
[1] 0.816496
> DI(e(1,3,4,2,6,4))
[1] 1.598611
Si como con la varianza lo que queremos es que haga referencia solo a la muestra tenemos que dividir por
nel en vee de por
Din<-function (x=WA)
{
acclength(x)
grt (sum (x (s
return(v)
+}
i
i
(29/m))"29//(n-1))
m(1:3)
D
14
Dim(e(1,3,4,2,6,4))
1 1.75119
Funcién Covarianza
Definimos la covarianza poblacional de dos conjuntos de datos como Covarianza =
> Covarianzac-function(x=NA,y=NA)
+
+ ne-Length(x) # 0 1a de y
+ cve~sum ((x- (sum (x) /n))“2* (y-(sum(y) /n))°2) fa,
+ return(ev)
+>
> Covarianza(1:4,2:5)
[1] 2.5625)
> x<-e(1,3,5,2,3,4)
> yee(3,2,1,6,3,2)
> Covarianza(x,y)
[1] 4.048296
Si lo que queremos es la covarianza muestral lo que tenemos que hacer es dividir por n-1 en vez de n.
> CovarianzaM<-function(x-NA,y=MA)
+4
+ ncclength(x) #0 la dey
+ cume-sum( (x~ (sum (x) /n))"24(y~ (sum y) /n))“2)/ (m1)
+ return (eve)
+}
> Covarianzal((x,y)
[1] 4.858556
Contreras J.M., Molina E. y Arteaga P.Punciones 47
Elementos ttiles a la hora de programar
Operadores de relacién
Con ! se indica la negacién, con & la conjuncién y con | la disyuncién. Estos dos iltimos, si se escriben
repetidios tienen el mismo significado, pero se evaliia primero la parte de la izquierda y, siya se sabe el resultado
(suponiendo que se pudiera calcular la expresién de la derecha) no se sigue evaluando, por lo que pueden ser
mas répidos y eliminar errores. j, 4, ;pectivamente los simbolos de menor, mayor, menor
igual, mayor o igual, ¢ igual. Advierta que este tiltimo se escribe con dos signos de igualdad
Estructuras condicionales,
Son aquellas que, segiin ol resultado de una comparacién, realizan una u otra accién. La primera estructura
es if (condicién) acciénl [else accién2]
4 Creamos una funcién que calcule el logaritmo de un ninero
Logaritmo<-function(x)
¢
+ if [Link](x)ee min(x)
>
Log(x)
else{stop("%x no es numérico 0 es cere")}
>
Logaritae(3)
[1] 1.098612
> Logarito(10)
[1] 2.302585
> logaritno(e)
Error en logaritmo(e) : objeto ’e? no encontrado
> logaritne("e")
Error en logaritno!
> logaritmo(exp(1))
(1
La segunda estructura es ifelse(condicién, accién en caso cierto, accién en caso falso)
> Inverso<-function(x)
+ ifelse(x==0,NA,1/x)
> Inverso(-2:3)
fe
>
1] -0.5000000 -1.0000000 NA 10000000 0.500000 0.333333
Inverso(-10: 10)
[1] ~9.1000000 -0.1111112 -0.1250000 -0.1428571 -0.168667 -0.2000000 ~.2500000 -0.3333333,
[s} -0.000000 -1.0000000 NA 1.000000 0.500000 0.333333 0.250000 0.200000
[17] 0.1666867 0.1428571 0.125000 0.111111 0. 1000000
La tercora estructura es switch (expresién |valor-1=Jaccién-1,...valor-n=Jaccién
nc3
syitch(n, "Uno",
1] "Tres"
net
suitch(n,
"Une?
nes
Decidir<-function(x)
suiteh(x,necat(MHas dicho n miniscula\n"),
Contreras J.M., Molina E. y Arteaga P.Punciones 48
+ Necat("Has dicho N mayiscula\n")
+ ,cat ("Dime n © N"))
> Deciair
function (x)
switch(x,n=cat ("Has dicho n mindscula"),
=cat("Has dicho N mayiscula")
seat ("Dime no N"))
> Decidir("N")
Kas dicho N maydscula
> Decidir("n")
Has dicho n mindscula
> Decidir("P")
Dine no
> ne-"Dos”™
> suitch(n,"Uno"=1, “Dos"=2, "Tres"=3)
2
> ne-"Dos™
> svitch(n,"Uno"=1, “Dos"=2, "Tzes"=3, "Otre")
i 2
> né-"Cinco"
> switch(n,"Uno"=1, "Dos"
[1] "otro"
"Tres"=3, "Otro")
Estructuras de repeticién definida e indefinida
Hay tres tipos de estructuras
for (variable in valores) aceién, while (condicién) accidn y repeat accién.
La estructura “for” asigna a variable cada uno de los valores y realiza la accién para cada uno. La estruc-
tura “while” evaltia la condicién y mientras esta es cierta se evalia la accién. La estructura “repeat” evalia
la accién indefinidamente. Bn los tres easos, el valor del cielo completo os el de la iltima evaluacién de la acciéa,
Las expresiones pueden contener algiin condicional como “if” asociado con las funciones “next” 0 “break”
La estructura “next” indica que debe terminasse la iteracién actual y pasar a la siguiente, La estructura
“break” indica que debe terminarse el ciclo actual,
> for(i in -8:5)
+ feat(a,"\t", 173, "\n")
+)
5 125
“4 -64
3 -27
2 8
1 1
° °
1 1
2 8
3 27
4 64
5 128
> for(i in ~8:5)
Contreras J.M., Molina B. y Arteaga P.Punciones 49
4 {af Geo) next; cat(,"\e", 1-2, "\n")
+)
5 25
4 16
3 9
2 4
1 1
1 1
2 4
3 8
4 16
5 25
> for(i in ~8:5)
+ {2fG==0) break; cat(i,"\t", 472, "\a")
+)
5 28
4 16
3 9
2 4
1 1
> ies
> while(i<=10) {print (i°2) ;i=1+1)
(1) 16
(1) 25
(1) 36
(1) a9
(1) 64
(1) a
[1] 100
> ic5
> repeat{print (172) ;ii¢1; if (i=
(1) 25
(1) 36
(1) 49
(1) 64
i) a
Invisible
La funcién “invisible” indica que un objeto no debe mostrarse, La sintaxis es “invisible(x)" siendo x
‘cualquier objeto que es devuelto a su vez por la funcidn, Esta funcién se usa muy a menudo para no presentar
directamente informaciones devueltas por funciones que, sin embargo, pueden ser utilizadas, Para hacerlo visible
basta con utilizar paréntesis,
> xe-2
> (xe-2)
(12
> fxe-2)
> invisible e)
>x
(1) 2
>
(2
> tx
Contreras J.M., Molina B. y Arteaga P.Punciones
ts 2
> Quer jyer3326-12)
> Cx iye-3;26-12))
i] 12
> xeyez
i 12
py
ta) 12
Ejemplos de funciones
Factorial de un nimero
factorial<-function(n)
{
fet
ifm)
for(i in 1:n)
fetes
return(f)
}
factorial (3)
s16
factorial (25)
1] 1.5511216+25
factorial (0)
ada
Dos procedimientos alternatives a la funcién anterior serfan los siguientes. La funcién factorial 3 consume
recursos debido a la recursividad y la funcién factorial.2 los consume porque genera todos los factores antes de
‘multiplicarlos, consumiendo memoria.
> factorial 3<-function(n)
+f
+ten
+ while(n>0)
+f
+ feonef
+ nent
+}
+ return(f)
+}
> factorial.3(3)
6
> factorial.3(25)
[1] 1.5511216+25
> factorial.3(0)
at
>the
> factorial.2<-function(n)
+f
+ if (>t)
Contreras J.M., Molina E. y Arteaga P.Punciones 51
+ fenefactorial.2(n-1)
+ else f<-1
+ return(t)
+)
> factorial.2(3)
tl 6
> factorial.2(25)
[1] 1.5511216+25
> factorial.2(0)
a
Progresién aritmética
Podemos construir tres funciones para implementarla: la primera corresponde a la forma explicita, la
segunda a la forma recursiva y la tercera a la forma reeursiva vectorial
altde(n-1)
for(i in 2in)ACi)=ALi-1} 4d
return(Aln])
+
arit.1(10)
1] 10
arit.2(10)
[11 10
> arit.3(10)
[1] 10
> # Si querenos comprobar el tiempo que emplea cada una
>
C
>
Progresién geométrica
[Link]-function (net, al
t
alte (n
y
[Link]
function (n=
1)
ser (n-1)
geonetrica()
P
112
[Link](2,3,2)
118
Contreras J.M., Molina E. y Arteaga P.Punciones
> # otra forma seria
> [Link]<-function(n=1,ai=1,r+1)
+f
+ if (>t)
+f
+ [Link](n-1,ai,r)+r
+}
+ else
+f
jeometrica?(2,3,2)
+
Pg
16
# Una ditina forma seria
P.geonetrica3<-function(ne1,al=1,r=1)
{
+ if (ment) return(at)
+ he
+ ACLI [Link](2,3,2)
til 6
Factorial de un nimero
ne-t0
4 Se crean un par vectores vacios
pares<-c()
impares<-c()
for(i in tim)
Af(ANL2"=0) pares<-c(pares,i) # Si es par
else impares<-c(impares,i)} # Si es impar
pares,
112 4 6 810
impares
1113578
Contreras J.M., Molina E. y Arteaga P.Parte V
Dispositivos graficosDispositivos graficos
ee dispaihw on Bom tod de gran calidad y porn one veretied smiy sande, Pare
ica (4 mado de ejemple), posemos eeeutar la fantsDispositivos gréficos 55
Para poder crear gréficas es necesatio inicializar un dispositive gyéfico (graphic device), y si hay varios,
‘legir uno de ellos,
> [Link]
> x10
> windows ()
La orden “Devices” indica qué dispositivos gréficos estan disponibles en el sistema en que trabajamos.
Windows , puede utilizar las funciones x11, win print, pictex, png, jpeg, bmp, win. metafile y postscript. En
‘cada caso, se abre el dispositivo grafico y no se devuelve nada a R.
Funcién x11.
La funcién x11 abre una ventana grafica a la que iran dirigidos los resultados graficos desde ese momento.
Los argumentos dela fanciéa, todos opcionales, son width, height y points,
Funcién pictex.
La funcin pictex genera griticos que pueden utiizaree en TEX y en LATEX. Pata utilizarlo en LATEX,
debe inlur la biblioteca plctex.
Funciones bmp, jpeg y png...
Cada una de estas funciones genera un guifico en el formato que indica su nombre. Debe tener en cuenta
‘que para el formato jpeg, R realiza una compresidn del archivo, de tal modo que el gréfico resulta modificado,
por lo que debe comprobar siempre si el mismo es correcto,
Pero también podemos guardar nuestra gréfica en una gran variedad de formatos desde el meni “Archivo
= Guardar como”, eligiendo el tipo de formato,
Las funciones que guardan el formato serfan:
Function Output to paf(?mygraph pdf") paf file win metafile(” [Link]!”) windows metafile png maygraph png")
png file jpeg("mygraph jpg") jpeg file brmp("maygraph bmp”) bmp file postscript("[Link]”) postscript file
See input/output for details
Contreras J.M., Molina B. y Arteaga P.Dispositivos gréficos 36
funciones graficas basicas
Algunos de los gréficos més usuales pueden gencrarse a pastir de bsicas tales como:
1 abline( ) Fancién que afiade una o més lineas rectas.
«= plot( ) Funcién genérica para representar en el plano xy puntos, lineas, ete
= barplot( ) Diagramas de barras
+ pie( ) Diagramas de sectores.
+ hist( ) Histogramas.
+ boxplot( ) Diagramas de box-and-whisker
1 stripplot( ) Similares a bozplot( ) con puntos,
+ sun/lowerplol{ ) Representacién en el plano xy de diagramas de girasol.
= qqnor( ) Diagramas de cuantil a cuantil frente a la distribucién normal,
* ggplot( ) Diagramas de cuantil a cuantil de dos muestras
= ggline{ ) Representa la linea que pasa por el primer y el tercer cuartil.
Para crear gréficos més completos podemos ayudamos de las siguientes funciones
+ Hines( ) Afiade lineas a un grafico.
+ points( ) Afade puntos a wn gratic.
= segments( ) Afiade segmentos @ un grético,
+ arrows( ) Aade lechas a un grafico.
+ polygons( ) Afiade poligonos a un gréfico.
1 reet( ) Afiade recténgulos [Link] grafico
+ abline( ) Atade una recta de pendiente e interseccién dada.
= curve( ) Representa una fimcidn dada.
‘Veamos a ver algunos de las funciones descritas anteriormente:
plot
plot es una funcién genérica que crea un gréfico en el dispositivo gréfico actual, Ademés existen funciones
cespeeificas en las que funciona de modo especial, como por ejemplo para [Link], Im, ete.
> xé-seq(~10, 10)
(1) -10 -9 -8 -
(20) 9 10
> plot (x,x,x1im=c(0, 10) ,yLim=c(0,10))
6 5-4-3 2-1 0123 45678
Contreras J.M., Molina B. y Arteaga P.Dispositivos gréficos
Lo complicamos un poco més.
> plot (1:10, (1:100)2, type
87
1")
Generanos un gréfico de dos variables comprendidas entre ~4 y 4
Representanos 20 nineros aleatorios de una distribucién normal en rojo
‘canos 10 nimeros aleatorios de una distribucién normal en azul y més grandes
+
> plot(-4:4, ~4:4, type = "a")
+
> points (rnorn(20), rnorm(20), col = "red")
# Repr
> points (rnerm(10), rnorm(10), col =
‘plue", cex = 3)
Contreras J.M., Molina B. y Arteaga P.Dispositivos gréficos 38
Utilizamos la funcién abline para crear un conjunto de Iineas que separen en filas la gréfica,
> for(i in 1:10)
+ abline(hei,col=i)
Y también para crear un conjunto de lineas que separen las Iineas por columnas.
> for(i in 1:10)
+ abline(v=i,col=i)
Contreras J.M., Molina B. y Arteaga P.Dispositivos gréficos 59
> # Creamos una gréfica de dos variables xe y con x entre -2 y Se y entre “Ly 5
> plot(e(-2,3), e(-1,5), type = "n", xlabe"x", ylabe"y", asp = 1)
> # Creamos un eje xy de color rojo
> abline(h=0, v=0, col = "red")
=
|
4 Asignanos una leyenda (recta y = 0), de color azul en el par (1,0)
text(1,0, "recta( y= 0)", col = "blue", adj = (0, =.1))
# Creanos una red para distinguir los pares
abline(h = -1:5, v= -2:3, col = "Lightgray", 1ty-3)
Contreras J.M., Molina B. y Arteaga P.Dispositivos gréficos 60
4 Creamos una recta de pendiente 2 y termine independiente 1
abline(a*t, b=2, col = 2)
# ABadinos una leyenda para nombrar 1a recta y=2x+l
text(1,3, "recta y=2xt1", col= "green", adj=e(-.1,~.1))
polygon
La funcién “polygon” dibuja un polfgono cuyos vértices se dan a partir de dos vectores x € y.
> plot (0,0, typee"n" xLinec(-5,5) ,ylimee(-5,5))
> x y <0(-4,0,4,4,0)
> polygon(x,y,col="red" border="black")
Contreras J.M., Molina B. y Arteaga P.Dispositivos gréficos 61
> polygon(1:9, ¢(2,1,2,1,NA,2,1,2,1)
+ density-c(10, 20), angiesc("45, 45}, colec(*red" ,"blue"))
‘También podemos utilizar “polygon” para crear grificos més complejos como’
>n< 100
> xx < ¢(0:n, 2:0)
> yy < ¢(c(O,cumsum(stats::rnorm(n))), rev(c(0,cunsum(stats: :rnorm(n)))))
> plot (ux, yy, type="n", xlab="Tiempo", ylab="Distancia")
> polygon(xx, yy, col="gray", border = "red")
> title("Distancia entre les movimientos brovnianos")
rect
Con la fumeién “oct” creamos rectngulos del color que descemos.
> # Creamos un marco para la grafica con x entre -10 y 10 ¢
> By en entre -10 y 10
> plot (0,0, type (-10, 10) ,yLim=e(-10,10))
‘a xLime
# Creanos un recténgulo con x de -4 a 4 y de -4.a 4 de color rojo
-4,4,4,col="red",border="black")
rect (~
Contreras J.M., Molina B. y Arteaga P.Dispositivos gréficos
arrows y segments
Con la funcién “arrows” creamos flechas entre puntos de un par de variables. Con"segments” creamos
figuras o sogmentos a partir de los valores.
dx ana
> y < €(10,2,3,10,11,5,6,3,8,11,9,12)
> plot (x,y, main="flechas y segnentos")
———
> # Flechas
> arrows(x(s}, y(s), x{s+1], ylst1], co!
> # Sognentos
> # Volvexos a crear el diagrana de puntos
> plot(x,y, maine"flechas y segnentos")
> seguents(x(s], yls), x[s+t], ylsr1], col
pink’)
Contreras J.M., Molina B. y Arteaga P.Dispositivos gréficos 63
‘También podemos jugar con los valores d las x € y.
> # Volvexos a crear el diagrama de puntos
> plot(x,y, main="flechas y segzentos")
> # Uninos loz pares
> seguente (els), yls), x[s+2], yle+2], col *pink’)
“curve” creamos funciones no lineales, tanto polinomiales como trigonométricas.
> curve(sin, -2epi, 2¥pi)
> curve(tan)
> # Si borranos la gréfica anterior sale diferente
Contreras J.M., Molina B. y Arteaga P.Dispositivos gréficos 64
> # Polinomiales
> curve(x"3-3ax, -2, 2)
> # Le adjuntanos una pardbola
> curve(x"2-2ext1, add = TRUE, col = “red")
‘Un argumento interesante es add, con el podemos adjuntar varias gréficas a la vez.
> curve(sin(«) ,-pi,pi, cols"blue")
> curve(cos(x) ,~pi,pi,addeTRUE, col="red")
Contreras J.M., Molina B. y Arteaga P.Dispositivos gréficos 65
on
Funcién text.
‘Una funcién muy stil es “text” ya que nos permite aiadir texto a un gréfico existente.
> curve(sin(x) ,-pi,pi,co:
> text (-2,0.5,"seno de x"
red")
» col="blue")
GrAficos estadisticos
barplot
Los diagramas de barras los creamos con la funcidn barplot
Empezamos con un ejemplo facil, supongamos que hemos recogido unos datos que hemos codificado con
escalas del 1 al 4, Queremos hacer un diagrama de barras con los resultados para cada una de los valores de
las variables.
> xe-6(4,2,3,1,2,1,2,4,1,3,2,4,1,2,3,1,2,4,2,1)
> # Calculanos 1a frecuencia acumulada de cada una de las variables
> table(x)
1234
7733
> frec.x<-table(x)
> # Creanos el diagrama de barras con las leyendas
> barplot (frec.x, main="Frecuencia relativa", xlab="Valores de 1a variable")
Contreras J.M., Molina B. y Arteaga P.Dispositivos gréficos 66
‘Vamos a ponerle nombre a las variables y cambiar las barras de vertical a horizontal,
> varplot (frec.x, main="Frecuencia relativa", xlab="valores de 1a variable",
+ horiz=TRUE,[Link]=c("Nenores de 18", "De 18 a 45", "De 45 a 65",
+ "Mas de 65"))
‘Vamos ahora a complicar un poco los gréficos haciendo gréficos de barras acumulados:
># Representanos un diagrama de barras con las variables x,y y 2;
># agrupadas una al lado de 1a otra (para juntarlas cambiamos TRUE por FALSE);
>t de grosor 45,50 y35;
># con los colores 1 y 2 (negro y rojo) ¥
># con 1a leyenda hombre y mujer
> barplot (height = cbind(x = c(4, 9), y= c(8, 2), z= c(3, 7) ), beside = TRUE,
+ width = (45, 50, 35), col = c(t, 2), [Link] = c("hombre", "mujer"))
Contreras J.M., Molina E. y Arteaga P.Dispositivos gréficos 67
pie
Los disgramas de
Por ejemplo un diagrama béseo sri
-a datos cualitativos los creamos con la funciGn pie
stores ps
> # Diagrama de sectores sinple
> mestra < (15, 12,4, 16, 8)
> paises<- c("USA", “Inglaterra”, "Australia",
‘Diagrana de sectores de paise:
"Alemania", "Francia
> pie(muestra, labels = paises, mail
Podemos mejorar la visualizacién de estos diagramas mediante
> # Diagrama de sectores con porcentajes
> muestra <- c(15, 12, 4, 16, 8)
> paises < c("USA", "Inglaterra", "hustralia
> pet <- round (questra/sun (muestra) #100)
> # Juntanos porcentajes y etiquetas
>
paises <- paste(paises, pct)
# Juntanos 1 y etiquetas
)
paises < paste(paises,"h",sep=
-ainbou (Length (paises),
‘Diagrama de sectores de paises")
pie(muestra,labels = paises, col
Contreras J.M., Molina E. y Arteaga P.Dispositivos gréficos 68
Veamos un ejemplo concreto, Caleulamos tn diagrama de sectores de la variable “Provincias de los alumnos
de
# Cierre el visor de gréficas
graphics. off()
# Abro el visor de gréficas
xi
[Link]<-c("GR", "CO", "MA", "GR","GR", "MA", "GR", "GR", "COM
Provincias. estudiantes
[1] "GR" "CO" "MAY "GR" "GR" "MAY "GR" "GR
> table([Link])
Provincias. estudiantes
co GR MA
25 2
> pie(table(Provincias estudiantes), col=c(
> title("Provincias de nacimiento
co"
|
| 4
‘También podemos crear gréficos en 3-dimensiones, para ello tenemos que servirnos de uno de los mejores
paquetes que podemos encontrar en CRAN a la hora de crear grficos, el paquete “plotrix” creado por Jim
Lemon y cols,
> # Diagrama de sectores 3D
> # Necesitanos el paquete plotris
Contreras J.M., Molina E. y Arteaga P.Dispositivos gréficos 69
> # Si no lo tenemos 1o podenos cargar con 1a orden
> # install. packages ("plotrix")
> Library (plotrix)
> escafios <- c(125, 120, 4, 16, 8)
> partidos < ¢("PSOE » "TU", "CTU", "PNV")
> pieBD(escafios, labels=partidos,explode=0.1, main="Elecciones Nacionales")
hist
Los histogramas para variables continuas lo representamos eon la funcién “hist”
> # Representanos un histograna de 1a variable x, con x 1000 datos nornales
> x<-rnerm(1000)
> hist (x)
Como vemos crea un histograma con los datos y como estos datos son normales e] histograma se asemeja
a la curva normal, Pero R asigna el mimero de intervalos y la amplitud de ellos. $i queremos modificaslos
utilizamos los argumentos “break” que indican los puntos de corte junto con otzos argumentos para darles
efectos visuales.
Contreras J.M., Molina B. y Arteaga P.Dispositivos gréficos 70
># creamos 13 intervalos (12 puntes de corte), de color azul y lineas rosas
> hist(x, freq = FALSE, breaks = 12, col="Lightblue", border="pink")
># creanos 4 intervalos (3 puntos de corte), de color azul y Line
> hist(x, freq = FALSE, breaks = 3, col="red", border="green")
Como vimos anteriormente podemos dibujar el histograma junto con gréfica de la normal para ver si los
datos se distribuyen o no normalmente.
> x<-rnorm(1000)
> hist (x, col="red" ,freq-F, x1im=c(-5,5)_
> curve(dnorm(x) ,-5,5,add-T,col="b1u
=
boxplots
Con la funcién boxplots se pueden crear diagramas de cajas para una o varias funciones. Para nuestros
ejemplos vamos a utilizar unos de los datos que R proporciona, la base de datos “mtcars”
mpg [GT] disp | bp | drat [ wi | qsec | vs [am | gear | carb
Mazda RX4 21.0 | 6 | 160.0 | 110 390] 2620) 646) 0] 1 4 4
Mazda RX4 Wag | 21.0] 6 | 160.0 | 110 | 3.90] 2875) 1702) 0) 1) 4 | 4
Datsun 710 228 | 4 | 1080 93 | 385] 2320) 1861 1) 1) 4 | 1
Volvo 1428 aia} 4 | 1210 | 109 441] 2780 | isso) 1} i | 4 2
Contreras J.M., Molina B. y Arteaga P.Dispositivos gréficos a
> boxplot (mpg cyl data-ntcars, main="Kilometraje",
+ xlabe"Cilindros", ylab="Kilénetros por litre")
‘ome
Podemos diferenciar con distintos colores la grifica con los argumentos de boxplot.
> boxplet (mpgcyl data-ntcars, main="Kilonetraje",
+ xlabe"Cilindres", ylab="Kilémetro por litre", col=(c("gold", "darkgreen")))
dotchart
Con a fancién “dotchartereamos diagramas de puntos por escalas (Cleveland dot plot). Utilizamos para
cllo los datos de R “VADeaths”
[ Rural Male [ Rural Female [ Urban Male [ Urban Female
soa 87 Ts Ba
3559| 182 nt 213 136
coo] 269 203 370 193
65.69) 410 309 aio 351
rota | 06.0 a4 ma 300
> dotchart (VADeaths, main = "Ratios de mortalidad en Virginia en 1940")
Contreras J.M., Molina B. y Arteaga P.Dispositivos gréficos 2
a :
Si trasponemos los datos y acotamos la gréfica tenemos:
> dotchart (t(VADeaths), xLim = c(0,100), main = "Ratios de mortalidad en Virginia en 1940")
‘Una variante de este gréfico nos la proporciona los distintos argumentos de dotchar. Para ello utilizamos
de nuevo los datos mtears
> # Ordenamos los datos por la variable apg
> x < ntcars [order (atcars$mpg),]
> # Vemos los factores de 1a variable cyl
> xScyl < factor(xScy1)
> xSeyl
[1] 8eseseeREsEesEs EEE FEE 44444 44dG
Levels: 468
> # Asignames colores a los factores
> x$color[x$cyl==4) < "rea"
> x$color[x$cyl==6) <- "blue"
> x$color(x$cyl==8) <- "darkgreen"
Sdibujanos los puntos
dotchart (x$mpg, [Link](x) ,cex=.7,groups= xScyl,
main="Kilonetraje segin modelo de coche",
xlab="Kilénetro por litre", gcolor="black", color=x8coler)
Contreras J.M., Molina B. y Arteaga P.Dispositivos gréficos 3
Funcién symbols
Esta funcién permite dibujar cfrculos, cuadrados, recténgulos, estrellas, termémetros y eajas en una posicién
determinada de un grafico, indicando ademis el tamaiio que deben tener,
> xeLil2
> 26-0(4,2,3,1,2,1,5,2,2,4,5,2)
> symbols (x,2,cireles=2,xLim=c(-1,12),ylim=c(0, 5), be!
BS
par
Entre los argumentos de la funcién “par” hay algunos que permiten presentar grétficos miiltiples. Ast, el
argumento “mfcol=c(np,n)", divide el dispositive grafico en man partes iguales, que se rellenan por columnas,
andlogamente “mfrow-=c(m,n)” rellena por filas.
> x=1:10
> y=(:12)°3
> par (mfrow=c(2,3))
> plot(x)
Contreras J.M., Molina B. y Arteaga P.Dispositivos grificos
> plot(y)
> plot (x,y?
> plot (x"2,y)
> plot(x,y"2)
> plot (x"2,y"2)
pairs
Esta funcién permite crear una matria de diagramas de puntos entre més de dos variables.
> x<-1:20
> ys-rnorm(20)
> ze-y"3
> paire(-xtytz)
4
Contreras J.M., Molina E. y Arteaga P.Dispositivos gréficos 8
‘También podemos hacer diagramas de puntos en 3D con la funcién “seatterplot3a” del paquete “scatter-
plot3d”
Library (scatterplot3a)
# Tonanos los datos mtcars
attach (stears)
> scatterplot3d(wt,disp,mpg, main="Diagrama de puntos en 3D ")
stars
La funcisn stars realiza un diagrama de estrellas, una por individuo, con informacidn de todas las variables.
> stars(cbind(1:16,2+(16:1)) ,dray-segments=TRUE)
wuvw
wees
een
Sh Re ln
Fractal con R
Como vamos a mostrar R proporciona el entomo grafico suficiente par desarrollar simulaciones de valores
para construir fractales, Tomemos un ejemplo para crear uno’
> # Creamos una funcién para dibujar nuestro ejemplo
> f1efunction(numere = 100)
<
Contreras J.M., Molina B. y Arteaga P.Dispositivos gréficos 16
x © vector(mode =
y = vector (node =
xt) = 1
yo
for(i in 2:numero)
<
it (sanple(2,
{w= 1}
else
{m= -1)
xi) = 0.8 *x(i- 1) +084 yli-t) +a
yl) = -0.8 #x(i- 1) +0.5*yli-t+e
+
return(list(x = x[2:nunero], y = y[2:numere]))
;
‘numeric, length = nurere)
numeric", length = nurere)
100)
fisfunction(nuero
vector (mode
vector (mode
1
for(i in 2:nunero)
¢
it (sample (2,1)
i= 1)
else
{m= -1)
xt)
yli)
}
return(list (x = x[2:nunero], y = y[2:nunere]))
}
xx<-£1(10000)
plot (xx)
plot(xx, col="green")
Sexli- 1) +05 yi - ttm
O5*xti- 1 +0.5*yli- +m
Otro fractal es el de Sierpinski creado por Caballero.
Contreras J.M., Molina E. y Arteaga P.Dispositivos gréficos 7
£2<- function(puntos~3000, tipos"*", color="black"){
x0
yoo
xU1] < abs (enorm(1))
ifG01) < 0.5)
yl] < abs (mnorm(t)+sqrs(3)*x(t])
else
yl] <= abs(rmorn(1)+(-sqrt(3)*x(t]+sqre(3)))
plot-new0
# Representa tres puntos -> Define el triéngulo
points(c(0,1,0.5,0) ,<(0,0,sqrt(3)/2,0), pchetipe, colscolor)
+ Punto al azar
+ points(x(1],y[1], peh=tipo, col=coler)
+ # Representa los restantes puntos dependiendo del tanafio especificado,
+ for(i in 2:puntos)
+
+ aux <- abs(3ernorm(1))
+ if (aux < 1)
e
xfi] < xfi-11/2
yli] < yli-t]/2
>
else
<
af (aux <= 2)
¢
xGi) < (texti-1)9/2
yli) < yli-t}/2
?
else
“
xLi) < (.S+x[1-1])/2
yi) < ((sqrt (3)/2)+yli-119/2
>
>
>
points (x,y,peh*tipo, col=coler)
+)
> £120
> £2(puntos=2000, tipo="*", color="blue")
Contreras J.M., Molina B. y Arteaga P.