0% encontró este documento útil (0 votos)
146 vistas77 páginas

Introducción A La Programación Lenguaje R

Programación en lenguaje R

Cargado por

Carlos St
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 o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
146 vistas77 páginas

Introducción A La Programación Lenguaje R

Programación en lenguaje R

Cargado por

Carlos St
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 o lee en línea desde Scribd
Parte I Introduccién al lenguaje R Introduccion 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 cientifica Introduccié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 nociones Primeras 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 Datos Manipulacié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) 18 Manipulacin 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 > LengtnGyi (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 Funciones Funciones 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. aL Punciones 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 graficos Dispositivos graficos ee dispaihw on Bom tod de gran calidad y porn one veretied smiy sande, Pare ica (4 mado de ejemple), posemos eeeutar la fants Dispositivos 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.

También podría gustarte