Curso b´sico de R a

Francesc Carmona
fcarmona@ub.edu 15 de febrero de 2007

El objetivo principal de este curso es proporcionar los elementos b´sicos para a empezar a trabajar con el lenguaje de programaci´n R en el ´mbito de la o a Estad´ ıstica.

´ Indice 1. Introducci´n o 1.1. R y S . . . . . . . . . . . . . . 1.2. Obtenci´n y instalaci´n de R o o 1.3. Paquetes . . . . . . . . . . . . 1.4. Documentaci´n . . . . . . . . o 1.5. Ayudas sobre R . . . . . . . . 7 7 10 11 12 16 17 17 18 19 20 21 22 23 24

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

2. Empezamos 2.1. Inicio de una sesi´n en R . . . . . o 2.2. Una primera sesi´n . . . . . . . . . o 2.3. R como calculadora . . . . . . . . . 2.4. Ayuda dentro del programa . . . . 2.5. Instalaci´n de paquetes adicionales o 2.6. Usar R desde un editor . . . . . . . 2.7. Un ejemplo . . . . . . . . . . . . . . 3. Objetos en R

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

3.1. 3.2. 3.3. 3.4. 3.5. 3.6. 3.7. 3.8.

¿Qu´ objetos? . . . . . . . . e Tipos de objetos . . . . . . Atributos de los objetos . . Nombres para los objetos . Operaciones aritm´ticas . . e Operadores l´gicos . . . . . o Discretizar datos . . . . . . Operaciones con conjuntos

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

24 25 28 30 31 33 35 36 37 37 39 40 41 43 44 45 47

4. Vectores 4.1. Generaci´n de secuencias . . . . . . o 4.2. Generaci´n de secuencias aleatorias o 4.3. Selecci´n de elementos de un vector o 4.4. Valores perdidos . . . . . . . . . . . . 4.5. Ordenaci´n de vectores . . . . . . . o 4.6. Vectores de caracteres . . . . . . . . 4.7. Factores . . . . . . . . . . . . . . . . 5. Arrays y matrices

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

2. . . . . . . . . . . . . . Datos 8. . . . . . . . . . . . . . Guardar y leer datos . . . . . . . . . . . . . . . . . . . . Lectura de datos . . . 6. . . . . . . Importar datos de Excel . . . Muchos objetos 7. . . . . .3. . . . . . . . . . Listas . . . 5. . . . . 47 51 54 55 55 58 61 61 63 63 64 68 70 70 71 72 . .frames 6. . . Tablas .2. . . . . . . . . . . . . . . .1. . . . . . . . . . . . . . . . . . . . . . . . . . . Combinaci´n de arrays . . . . . . . . . . . . Operaciones con matrices . .5. . . . . .1. 5. . . . . . . . . . . . . . 8. . . . . . . .4. . .2. . . . . . . . . . . . . . . o 6. . . o 6. . Los objetos que tenemos . . . . 7. . . . . .2. . . . . . . Data. 7. . . . . 8. . . . . . . .1. . . . . . . . . . . . . . . . . . . . . 7. . . . . . . . . . . . . . . . . . . La familia apply 6. . . . . En resumen . . . . . . . . .3. . . . . . . . . . . . . . . . . . . Definiciones . . . . . . . . . . .1.3. Ejemplo . 8. . . . .3. . . . . . . . . . . . . . . . . Definici´n .

. . . . . 74 75 75 76 80 81 82 83 84 85 86 87 88 88 89 91 92 9. . . . 9. . . . . . . . . . . . .1. . . . . . . . El comando plot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Scope . . . . . Definici´n de funciones o 10. . . M´ltiples gr´ficos por ventana . . . . Argumentos . . . . . . . .3. . . . . . . . . . . . .6. . . .9. . . . . . . . Datos multivariantes .4. . . a 10. . . . . . . . . . . . . . . . . . . . 9. .7. . . . . . . . . . . . . . . . . . . . . . Dibujar rectas . .2. . . . . . . . . . . . .1. . . . . . . . . . . . . . . . . . . . . . .3. . . . . . . . . . . . . . Introducci´n . .10. . . . . . . . . . . . . . . . . . . . . .4. . . . . . . . . . . . . . . . Un poco de ruido . . . . . . . . . . . . . . . . . . 9. . . . . . . . . . . .4. . 10. . . . . . . . . Exportar datos . . Guardar los gr´ficos . . Identificaci´n interactiva de datos o 9. . . u a 9. M´s gr´ficos . . . . . Gr´ficos a 9. . . . . . . . . . .8.5. . . 9. . . . . . . a a 9. . . o . Funciones 10. . . . . . . Control de ejecuci´n . . .2. . . . . . . . . Boxplots . . . . . . . . . o 9. . . . 9. . .8. . . . . . . 10. .

.5. . . . . . . . Ejecuci´n no interactiva . . a . . . . . . . . . . Cuando algo va mal .10. . . . . o 95 97 Este curso est´ basado muy especialmente en el documento a Introducci´n al uso y programaci´n del sistema estad´ o o ıstico R de Ram´n D´ o ıaz-Uriarte de la Unidad de Bioinform´tica del CNIO. . . . . .6. . . . . . . . 10. . . . .

Introducci´n o R y S .1.1. 1.

1. tambi´n conocido como ”GNU S”. es un entorno y un lenguaje para e el c´lculo estad´ a ıstico y la generaci´n de gr´ficos.1. Introducci´n o R y S R. desarrollado en los Laboratorios Bell por John Chambers et al.1. . R implementa un o a dialecto del premiado lenguaje S.

es un entorno y un lenguaje para e el c´lculo estad´ a ıstico y la generaci´n de gr´ficos. Introducci´n o R y S R. 1. Para los no iniciados diremos que R provee un acceso relativamente sencillo a una amplia variedad de t´cnicas estad´ e ısticas y gr´ficas. a .1. R implementa un o a dialecto del premiado lenguaje S.1. desarrollado en los Laboratorios Bell por John Chambers et al. tambi´n conocido como ”GNU S”.

Introducci´n o R y S R. es un entorno y un lenguaje para e el c´lculo estad´ a ıstico y la generaci´n de gr´ficos. R implementa un o a dialecto del premiado lenguaje S.1. tambi´n conocido como ”GNU S”. .1. 1. a Para los usuarios avanzados se ofrece un lenguaje de programaci´n o completo con el que a˜adir nuevas t´cnicas mediante la definici´n de n e o funciones. Para los no iniciados diremos que R provee un acceso relativamente sencillo a una amplia variedad de t´cnicas estad´ e ısticas y gr´ficas. desarrollado en los Laboratorios Bell por John Chambers et al.

Para los no iniciados diremos que R provee un acceso relativamente sencillo a una amplia variedad de t´cnicas estad´ e ısticas y gr´ficas. tambi´n conocido como ”GNU S”. a Para los usuarios avanzados se ofrece un lenguaje de programaci´n o completo con el que a˜adir nuevas t´cnicas mediante la definici´n de n e o funciones. R implementa un o a dialecto del premiado lenguaje S.1. ”S ha modificado para siempre la forma en la que las personas analizan. . visualizan y manipulan los datos”(Association of Computer Machinery Software System Award 1998 a John Chambers). es un entorno y un lenguaje para e el c´lculo estad´ a ıstico y la generaci´n de gr´ficos. desarrollado en los Laboratorios Bell por John Chambers et al.1. Introducci´n o R y S R. 1.

.Actualmente. S y R son los dos lenguajes m´s utilizados en a investigaci´n en estad´ o ıstica.

Los grandes atractivos de R/S son: .Actualmente. S y R son los dos lenguajes m´s utilizados en a investigaci´n en estad´ o ıstica.

Actualmente. sin fisuras. . espec´ ıficos para una situaci´n: capacidad de manipular y o modificar datos y funciones.. an´lisis a ”preempaquetados”(ej. una regresi´n log´ o ıstica) con an´lisis a ad-hoc. Los grandes atractivos de R/S son: La capacidad de combinar. S y R son los dos lenguajes m´s utilizados en a investigaci´n en estad´ o ıstica.

una regresi´n log´ o ıstica) con an´lisis a ad-hoc.Actualmente. an´lisis a ”preempaquetados”(ej. S y R son los dos lenguajes m´s utilizados en a investigaci´n en estad´ o ıstica. sin fisuras. Los gr´ficos de alta calidad: visualizaci´n de datos y producci´n a o o de gr´ficos para papers. a . espec´ ıficos para una situaci´n: capacidad de manipular y o modificar datos y funciones. Los grandes atractivos de R/S son: La capacidad de combinar..

Terney. J.Actualmente.). Los gr´ficos de alta calidad: visualizaci´n de datos y producci´n a o o de gr´ficos para papers. etc. . L. S y R son los dos lenguajes m´s utilizados en a investigaci´n en estad´ o ıstica. B. e integrada por estad´ u ısticos de gran renombre (ej. a La comunidad de R es muy din´mica. Los grandes atractivos de R/S son: La capacidad de combinar. Chambers. espec´ ıficos para una situaci´n: capacidad de manipular y o modificar datos y funciones. sin fisuras. Bates. una regresi´n log´ o ıstica) con an´lisis a ad-hoc.. con gran crecimiento del a n´mero de paquetes.. Ripley. D. an´lisis a ”preempaquetados”(ej.

an´lisis a ”preempaquetados”(ej. J. e integrada por estad´ u ısticos de gran renombre (ej. Bates. a a geoestad´ ıstica y modelos gr´ficos. S y R son los dos lenguajes m´s utilizados en a investigaci´n en estad´ o ıstica. Terney. B. L. Chambers. Hay extensiones espec´ ıficas a nuevas ´reas como bioinform´tica. espec´ ıficos para una situaci´n: capacidad de manipular y o modificar datos y funciones. a .. a La comunidad de R es muy din´mica. una regresi´n log´ o ıstica) con an´lisis a ad-hoc. Los grandes atractivos de R/S son: La capacidad de combinar. sin fisuras.).Actualmente. D.. con gran crecimiento del a n´mero de paquetes. Los gr´ficos de alta calidad: visualizaci´n de datos y producci´n a o o de gr´ficos para papers. etc. Ripley.

D. etc. Hay extensiones espec´ ıficas a nuevas ´reas como bioinform´tica. a La comunidad de R es muy din´mica. a Es un lenguaje orientado a objetos. S y R son los dos lenguajes m´s utilizados en a investigaci´n en estad´ o ıstica.. Ripley. e integrada por estad´ u ısticos de gran renombre (ej. a a geoestad´ ıstica y modelos gr´ficos. an´lisis a ”preempaquetados”(ej. espec´ ıficos para una situaci´n: capacidad de manipular y o modificar datos y funciones.. con gran crecimiento del a n´mero de paquetes. Los grandes atractivos de R/S son: La capacidad de combinar. sin fisuras. L. .). Bates. una regresi´n log´ o ıstica) con an´lisis a ad-hoc. B.Actualmente. Chambers. Los gr´ficos de alta calidad: visualizaci´n de datos y producci´n a o o de gr´ficos para papers. Terney. J.

L. una regresi´n log´ o ıstica) con an´lisis a ad-hoc. con gran crecimiento del a n´mero de paquetes. etc. a La comunidad de R es muy din´mica. e integrada por estad´ u ısticos de gran renombre (ej. S y R son los dos lenguajes m´s utilizados en a investigaci´n en estad´ o ıstica. Se parece a Matlab y a Octave. J. Ripley.Actualmente. Los gr´ficos de alta calidad: visualizaci´n de datos y producci´n a o o de gr´ficos para papers. . Terney. Hay extensiones espec´ ıficas a nuevas ´reas como bioinform´tica. B.. a Es un lenguaje orientado a objetos. espec´ ıficos para una situaci´n: capacidad de manipular y o modificar datos y funciones. D. Los grandes atractivos de R/S son: La capacidad de combinar.. Bates. sin fisuras. an´lisis a ”preempaquetados”(ej. Chambers.). a a geoestad´ ıstica y modelos gr´ficos. y su sintaxis recuerda a C/C++.

org ıa . o Filosof´ y objetivos del proyecto GNU: http://www.gnu.R es la implementaci´n GNU de S.

org/licenses/gpl.org ıa R se distribuye con licencia GNU GPL o General Public http://www.gnu. o Filosof´ y objetivos del proyecto GNU: http://www.gnu.html .R es la implementaci´n GNU de S.

o Filosof´ y objetivos del proyecto GNU: http://www. Restringe su o distribuci´n (ha de ser GPL).html La GPL no pone ninguna restricci´n al uso de R.gnu.gnu.org/licenses/gpl. o .org ıa R se distribuye con licencia GNU GPL o General Public http://www.R es la implementaci´n GNU de S.

.es.org S-PLUS es un programa comercial.org/licenses/gpl.gnu.R es la implementaci´n GNU de S.gnu.r-project. Restringe su o distribuci´n (ha de ser GPL).html La GPL no pone ninguna restricci´n al uso de R. o Filosof´ y objetivos del proyecto GNU: http://www. o R se obtiene por 0 euros en http://cran.org ıa R se distribuye con licencia GNU GPL o General Public http://www.

2. Obtenci´n y instalaci´n de R o o .1.

pero todo se puede encontrar en http://cran.es. Obtenci´n y instalaci´n de R o o Depende del sistema operativo.1.2.org/bin .r-project.

pero todo se puede encontrar en http://cran.r-project.1.2.es.org/bin . Obtenci´n y instalaci´n de R o o Depende del sistema operativo.

pero todo se puede encontrar en http://cran.r-project.2.1-win32.exe Al ejecutar el archivo se instalar´ el sistema base y los paquetes a recomendados.4.r-project.r-project. http://cran. Obtenci´n y instalaci´n de R o o Depende del sistema operativo.org/bin Windows: se puede obtener un ejecutable desde http://cran.es.es. .org/bin/windows/base/R-2.es.org/bin/windows/base por ejemplo.1.

org/bin/windows/base por ejemplo.deb para Debian.gz y compilar desde las fuentes. Tambi´n bajar los paquetes adicionales y instalarlos. *.1. Obtener binarios (ej. (Buena e forma de comprobar que el sistema tiene development tools). SuSE.2.r-project.es.es. Obtenci´n y instalaci´n de R o o Depende del sistema operativo.1-win32.org/bin Windows: se puede obtener un ejecutable desde http://cran. pero todo se puede encontrar en http://cran.r-project. *..4.org/bin/windows/base/R-2. GNU/Linux: (dos opciones) 1. Obtener el R-x. Mandrake).rpm para RedHat.es. http://cran.tar.z. . 2.y.r-project.exe Al ejecutar el archivo se instalar´ el sistema base y los paquetes a recomendados.

1.org/src/contrib/PACKAGES.es.3.r-project. Paquetes R consta de un sistema base y de paquetes adicionales que extienden su funcionalidad.html . http://cran.

org/src/contrib/PACKAGES.html Tipos de paquetes: .r-project.3.es.1. Paquetes R consta de un sistema base y de paquetes adicionales que extienden su funcionalidad. http://cran.

ctest).html Tipos de paquetes: Los que forman parte del sistema base (ej. http://cran.r-project.org/src/contrib/PACKAGES. .3.es. Paquetes R consta de un sistema base y de paquetes adicionales que extienden su funcionalidad.1.

org/src/contrib/PACKAGES. nlme). pero son recommended (ej.3. a .es.r-project. survival. http://cran. En GNU/Linux y Windows ya forman parte de la distribuci´n o est´ndar.1. Paquetes R consta de un sistema base y de paquetes adicionales que extienden su funcionalidad. Los que no son parte del sistema base.html Tipos de paquetes: Los que forman parte del sistema base (ej. ctest)..

.html Tipos de paquetes: Los que forman parte del sistema base (ej.es. ej. foreing.1. Paquetes R consta de un sistema base y de paquetes adicionales que extienden su funcionalidad. survival.3. pero son recommended (ej. http://cran. ctest). UsingR.). los paquetes de Bioconductor (como multtest. ´ Estos se han de seleccionar y instalar individualmente. Los que no son parte del sistema base.org/src/contrib/PACKAGES. nlme). o . En GNU/Linux y Windows ya forman parte de la distribuci´n o est´ndar.r-project. a Otros paquetes. M´s a adelante veremos c´mo.. etc.

(De lectura obligatoria) Writing R extensions. Documentaci´n o Los manuales de R. The R language definition. R installation and administration. incluidos en todas las instalaciones son: An introduction to R.4. . R data import/export.1.

ac. Venables y B.burns-stat. A guide for the unwilling S user. e . de E.org/doc/contrib/Paradis-rdebuts_en.uk/pub/MASS3/Sprog.r-project.es. Ripley.org/doc/contrib/Burns-unwilling_S. Paradis. En http://cran.es.pdf o http://www. Ver tambi´n http://www. En http://cran. ¡S´lo 8 p´ginas! o a R Graphics.r-project.stats. de Paul Murrell. de W. Burns.r-project.pdf o http://cran.com/pages/tutorials. S Programming.ox.es.pdf.org/doc/contrib/rdebuts_es.html. de P.Documentaci´n general: o R para principiantes.

html Introductory statistics with R de P.html . Fox.Estad´ ıstica: simpleR Using R for Introductory Statistics de John Verzani en http://www.org/other-docs.cuny. Estad´ ıstica Aplicada con S-PLUS de M. de W. 4th ed. Ver tambi´n http://www.es.stat. Dolores Ugarte y Ana F. e Practical regression and ANOVA using R de J.math.r-project.umich. Dalgaard.edu/~ faraway/book/. en http://cran.stats. Otros documentos en http://cran.csi.ox. Faraway.edu/Statistics/R/simpleR/index.ac. Militino.lsa.uk/pub/MASS4.org/other-docs. Ripley. Venables y B.html o http://www. Modern applied statistics with S. An R and S-PLUS companion to applied regression de J.r-project.

Modelos Lineales de F. ”Site¸on documentaci´n sobre an´lisis para datos categ´ricos c o a o (”site”para el libro de A.r-project.edu/~ aa/cda/cda.stat. Harrell.html . Grambsch. Vol. Therenau y P.html Modeling survival data: extending the Cox model de T. Regression modelling strategies de F.com/support/documentation.org/doc/contrib/Fox-Companion/appendix.0 for Unix.ufl.insightful. En http://www. Pinheiro y D. Carmona. M. Agresti Categorical data analysis). Fox a http://cran. Guide to statistics. http://www.asp?DID=3 Mixed-effects models in S and S-PLUS de J. Documentos varios en la p´gina de J. M. I & II.S-PLUS 6. Bates.

r-project.ac.es.html Rtips de Paul Johnson http://pj. Ver http://cran.freefaculty.ucl. Ayudas sobre R Hay diversas formas de ayuda: Ayuda incluida con el programa (lo veremos m´s adelante).5. a FAQ: http://cran.es.upenn.org/R/Rtips.html R Help Center http://www.1.edu/search. e o .stat.be/ISdidactique/Rhelp/ Las e-mail lists son “consultables”.psych.org/faqs.org/search.r-project. Permiten hacer las b´squedas no s´lo sobre las listas de e-mail u o sino tambi´n sobre la documentaci´n (incluyendo paquetes).html y http://finzi.html.

. . C:\Archivos de programa\R\R-2. Iniciar R desde Tinn-R.1\bin\Rterm.2.exe parecido a R en Unix o Linux.1. Empezamos Inicio de una sesi´n en R o Windows: Hacer doble-click en el icono.. 2. XEmacs o un editor apropiado.4. a Desde una “ventana del sistema” ejecutar Rterm o desde Inicio-Ejecutar. Se abrir´ “Rgui”.

2. .exe parecido a R en Unix o Linux..1\bin\Rterm.). se puede adaptar el inicio de una sesi´n de R (ej.1. Iniciar R desde (X)Emacs (M-X R).8 en An e o introduction to R. En cualquier caso. XEmacs o un editor apropiado. Empezamos Inicio de una sesi´n en R o Windows: Hacer doble-click en el icono. etc. a Desde una “ventana del sistema” ejecutar Rterm o desde Inicio-Ejecutar.2. mensajes.. Ver secci´n 10. GNU/Linux: Escribir “R” en una shell. C:\Archivos de programa\R\R-2.4. o qu´ paquetes se cargan. Se abrir´ “Rgui”.. Iniciar R desde Tinn-R.

2.summary(x) w print(w) # escribir w y print(w) produce el mismo resultado ## summary(x) TAMBI´N es un objeto.rnorm(5) # asignamos unos n´meros a un objeto (un vector) x u summary(x) ## muestra un resumen de x (un summary "inteligente") ## o tambi´n: e w <.2. sd = 1) u ## "#" indica el principio de un comentario ## Los n´meros se calculan y se muestran (print) u x <. E (virtually) “everything is an object” . > > > > > > > > > > > > > Una primera sesi´n o rnorm(5) # 5 n´meros aleatorios de una normal (mean= 0.

90)*pi/180) .1000 # R conoce pi pi # Circunferencia de la Tierra en el Ecuador en km 2*pi*6378 # Convertimos ´ngulos a radianes y luego calculamos el seno a sin(c(0.3.075)^5 . > > > > > > > > > > > R como calculadora 2+2 sqrt(10) 2*3*4*5 # Intereses sobre 1000 euros 1000*(1+0.2.45.60.30.

demo(lm.glm) !Cuidado¡ > ?if # mal > help("if") .search help.start() ?help. Ayuda dentro del programa ?rnorm help.4.search("normal") ?apropos apropos("normal") ?demo demo(graphics). demo(persp).2.

con install.5.2. Desde una “ventana del sistema” o desde Inicio-Ejecutar.. . u Primero nos pide seleccionar el “CRAN mirror”. Desde R. Rcmd INSTALL paquete Desde la interface de XEmacs.packages() como en GNU/Linux... Instalaci´n de paquetes adicionales o Depende del sistema operativo: Windows: Desde el men´ Packages->Install package(s)..

y. a o install. GNU/Linux: R CMD INSTALL paquete-x. e . Tambi´n permiten instalar si no eres root (especificar lib.packages() como en GNU/Linux.z.2. con install.gz Permite instalar aunque uno no sea root (especificar el dir)..5. desde R.packages().. Desde una “ventana del sistema” o desde Inicio-Ejecutar..packages(). update..tar.loc). M´s c´modo. u Primero nos pide seleccionar el “CRAN mirror”. Rcmd INSTALL paquete Desde la interface de XEmacs. etc. Desde R. Instalaci´n de paquetes adicionales o Depende del sistema operativo: Windows: Desde el men´ Packages->Install package(s).

savehistory). Una buena elecci´n: Tinn-R. e Una interface com´n para otros paquetes estad´ u ısticos (ej.. o Tambi´n WinEdt tiene una configuraci´n adaptada: R-WinEdt.).2. Colores de sintaxis. e o (X)Emacs es MUCHO m´s que un editor.. . R-WinEdt o XEmacs? e El uso de scripts y el mantenimiento del c´digo ordenado y o comentado es una “buena pr´ctica estad´ a ıstica” (ver tambi´n e loadhistory. XLispStat.6. Fox). Arc. num´ricos (ej.. aunque no es muy a conocido para los usuarios de Windows (mejor con las modificaciones de J. SAS. etc. Octave) o procesador de e texto (LaTeX). etc.. Usar R desde un editor ¿Por qu´ usar R desde un editor como Tinn-R.. completa par´ntesis.

. . n <. Se sabe que la distribuci´n o de Z = n · m´ ın{X1 .alpha). . Xn una muestra aleatoria simple.matrix(rexp(n * m."pexp".apply(datos.fz) mean(z) # debe ser 1/alpha=100 hist(z. alpha).type="l") ks.test(z. . .7. ncol=n) fz <.2.function(x) n*min(x) z <.alpha) .0. . .50. m <. .freq=F) points(dexp(0:600.01. X2 .1. X2 .a. Un ejemplo Sea X una v. con distribuci´n exponencial de par´metro α y o a X1 . a > > > > > > > > > > alpha <. Xn } es exponencial de par´metro α.1000 datos <.

RData") > ls(pos=2) # segunda posici´n en la ‘‘search list’’ o . incluyendo funciones y estructuras de datos.3.image() y save(<objetos>.1. 3. Para guardar el contenido del espacio de trabajo se pueden utilizar las funciones save.file="nombre. Objetos en R ¿Qu´ objetos? e Casi todo en R es un objeto. Escribir el nombre de un objeto muestra su contenido: mean. Para saber los objetos que tenemos en el espacio de trabajo utilizaremos ls().RData") Para acceder a objetos de la carpeta de trabajo (o del camino que especifiquemos) se pueden adjuntar: > attach("misdatos.

2. Tipos de objetos objetos del lenguaje: llamadas expresiones nombres .3.

Tipos de objetos objetos del lenguaje: llamadas expresiones nombres expresiones: colecciones de expresiones correctas no evaluadas .3.2.

2.3. Tipos de objetos objetos del lenguaje: llamadas expresiones nombres expresiones: colecciones de expresiones correctas no evaluadas funciones: Constan de lista de argumentos c´digo o entorno .

Tipos de objetos objetos del lenguaje: llamadas expresiones nombres expresiones: colecciones de expresiones correctas no evaluadas funciones: Constan de lista de argumentos c´digo o entorno sin objeto: NULL .3.2.

"b".c(1. 2. "c") > z <. FALSE) . 3).c("a". y <. o > x <. TRUE.c(TRUE.Objetos para los datos: vector: colecci´n ordenada de elementos del mismo tipo.

Elementos del o mismo tipo. TRUE. "b". 2.c(TRUE. FALSE) array: generalizaci´n multidimensional del vector. "c") > z <. 3).c(1. y <.Objetos para los datos: vector: colecci´n ordenada de elementos del mismo tipo. o > x <.c("a". .

frame(ID=c("gen0". 125)) .Objetos para los datos: vector: colecci´n ordenada de elementos del mismo tipo.data. subj2 = c(NA.30. "genZ"). o > x <. Elementos del o mismo tipo. "genB". 33). 15). "c") > z <. a > + + + dades <. "b". TRUE. TRUE. pero con columnas de diferentes tipos.c("a". FALSE) array: generalizaci´n multidimensional del vector. 2. Es el objeto m´s habitual para los datos experimentales.c(TRUE. FALSE).c(1. 25. 34. loc = c(1. 3). y <. oncogen = c(TRUE. subj1 = c(10. data frame: como el array.

2.c(1. a > + + + dades <.factor(c(1. 2. y <. TRUE. 1)) . 15). TRUE.c("a".Objetos para los datos: vector: colecci´n ordenada de elementos del mismo tipo.30. oncogen = c(TRUE. 1.c(TRUE. 1. 1. o > x <. FALSE) array: generalizaci´n multidimensional del vector. 2. Es el objeto m´s habitual para los datos experimentales. 125)) factor: tipo de vector para datos cualitativos.data. Elementos del o mismo tipo. 33).frame(ID=c("gen0". 2. "b". 3). > x <. "genB". subj1 = c(10. 34. loc = c(1. FALSE). subj2 = c(NA. "genZ"). 25. pero con columnas de diferentes tipos. data frame: como el array. 2. "c") > z <.

palabra = "hola". Cada lista est´ formada por componentes que pueden ser otras a listas. Muchas funciones devuelven una lista o conjunto de resultados de distinta longitud y distinto tipo. Cada componente puede ser de distinto tipo. + b = factor(c("a".matriz = matrix(rnorm(20). ncol = 5). + una. pero sin estructura.vector = 1:10. Muy flexibles. "b")))) .c(un. + lista2 = c(a = 5. Son contenedores generales de datos.list: vector generalizado. > una. + una.lista <.

3.. a o car´cter.. entero. Atributos de los objetos Modo: Tipo b´sico en un vector o array: l´gico..3. . real. typeof Nombres: etiquetas de los elementos individuales de un vector o lista: names Dimensiones: de los arrays (alguna puede ser cero): dim Dimnames: nombres de las dimensiones de los arrays: dimnames Clase: vector alfanum´rico con la lista de las clases del objeto: class e Otros: atributos de una serie temporal. mode a Tipo: de los vectores o arrays: double....

attributes(y) f1 <. 5).matrix(5. 4. mode(y). b = 5).1:15. typeof(x2). 3. is.1:5. ncol = 4).c(1.data. mode(z) attributes(y) w <.c(TRUE.vector(x). z <. FALSE).array(x) x1 <. dim(y) is.function(x) {return(2 * x)} attributes(f1). is. x3 <. nrow = 3. attributes(w) y <.as. x2 <.function(f1) . length(x) y <.frame(y). is."patata" typeof(x1).Ejemplos: > > > > > > > > > > > x <. 2.list(a = 1:3. typeof(x3) mode(x).vector(y).

c > rm(c).1:5 # Mucho mejor . u R es “case-sensitive”: x != X.c(3. a n´meros y el punto (“. x <. Otras consideraciones: • El uso del “.”)..). u Los nombres no pueden empezar con un n´mero. Hay nombres reservados (“function”.3.4. > c <. > x<-1:5 # Estilo incorrecto > x <. El signo "=" se reserva para los argumentos de las funciones.” es distinto del de C++.4. etc. Nombres para los objetos Los nombres v´lidos para un objeto son combinaciones de letras. “if”. “c”) (se puede arreglar). • Mejor evitar nombres que R usa (ej. 8). c • Las asignaciones se hacen con "<-" y se recomiendan los espacios.

3. a • M´s f´cil de hacer “debugging”. Operaciones aritm´ticas e Las operaciones con vectores mejoran el uso de bucles. a a M´s eficiente (en tiempo y memoria). a . Todo m´s claro: a • Es la forma natural de operar sobre objetos completos.5. • C´digo m´s f´cil de entender. a a • M´s r´pido de escribir. o a a • M´s sencillo de modificar y mantener.

cummin Ejemplo: > > > > > data(presidents) help(presidents) range(presidents. base).max(presidents)# 2 .rm = TRUE) which. pmax. ra´ cuadrada sqrt ız %/% divisi´n entera. asin. logb(x.Principales operaciones aritm´ticas: e suma +. range. prod. cumprod. acos. resta -. diff cumsum. quantile sum. na. sd. tan. log2. pmin. %% m´dulo: resto de la divisi´n entera o o o logaritmos log. divisi´n / o o potencia ^. exponencial exp trigonom´tricas sin. cos. cummax.min(presidents)# 28 which. median. log10. min. atan e otras: max. multiplicaci´n *. mean. var.

3. >.c(TRUE. >=.6.c(TRUE. x == 6. Operadores l´gicos o <.numeric(x) && min(x) > 0) {entonces. TRUE) xor(y. min(x) no tiene sentido si x no es num´rico. z <. as. !y. ==. x >= 5.numeric(y). != !. y | z Las formas &&. xor() y los parecidos &&. || se eval´an de izquierda a derecha. <=."numeric" . Se suelen usar o dentro de instrucciones “if”. x != 5 y <.5. || > > > > x <. e 0 + y.. z) y & z. &. if (is.. FALSE). mode(y) <. |. x < 5. examinando u s´lo el primer elemento de cada vector (si decide).

3)) peso[trat=="A"] peso[trat=="A"|trat=="B"] split(peso.23.17.14.19.3).25) peso < 20 peso < 20 | peso > 25 peso[peso<20] peso[peso<20 & peso!=15] trat <.30.trat) split(peso.20.trat)$A .3).c(rep("A".rep("B".rep("C".Ejemplo: > > > > > > > > > > peso <.15.c(19.

3. Discretizar datos La funci´n split(x.7.cut(vv.rnorm(100) cut1 <. 1/2.cut(vv.f) o > split(peso. 5) table(cut1) cut2 <. 1/4. 1))) summary(cut2) class(cut2) .trat)$A La funci´n cut o > > > > > > > vv <. quantile(vv. c(0. 3/4.trat) > split(peso.

3. > > > > > > > > > > Operaciones con conjuntos x <. v) setdiff(v. "blX1") w <. "xA3") union(v.1:5. y <. w) setdiff(w.c("bcA2". y) setdiff(y.c("bcA1". x) v <. w) . y) intersect(x. w) intersect(v.c(1. 7:10) union(x. "bcA2".3.8.

1:(4+1) x <.seq(from = 2.seq(from = 2.by=2)) .4.-5:3 1:4+1. y <.1. to = 18.seq(along = x) z2 <.c(1.to=5. 4. 4. length = 30) y <. > > > > > > > Vectores Generaci´n de secuencias o x <. 7:10. by = 2) x <. 3.c(1:5. 2. 5) x <. seq(from=-7. to = 18.1:10.

grid(edad = c(10. "Hembra"). loc = 1:3) Podemos combinar: z5 <. 2) y <. rep(5.rep(5. length = 8) gl(3. x) rep(x. "Muerto")) expand. 3)) . length = 20) # !Alerta! gl genera factores gl(3. rep(x. label = c("Sano". 5) # como rep(1:3. 3). 3)) gl(4. rep(5. 3)) rep(x. 25). 4. "Enfermo". 18. 5) x <.1:3.c(1:5. y) rep(1:3. 1. sexo = c("Macho". rep(x.> > > > > > > > > > > rep(1. rep(8.

mean = 0. replace = TRUE) sample(x.2. prob = probs) rDistribuci´n(n.4.1:10 sample(x) sample(x.max=10) .x/sum(x) sample(x.sd = 1) > runif(8. 3) x <. replace = TRUE) probs <.par´metros) o a N´meros aleatorios u > rnorm(10) # rnorm(10.min=2. length = 2* length(x). > > > > > > > > Generaci´n de secuencias aleatorias o sample(5) sample(5.

x[y] names(x) <.1:5. "c".c("a". > > > > > > > > Selecci´n de elementos de un vector o x <. 2.c(1. 5). x[c(1.3. "patata")] . "b".4. x[3]. "patata") x[c("b".x > 3 x[y] x[-c(1. 4)]. y <. x[1]. "d".3)] x[x > 3] x > 3 y <.

na(5/0) Con algunas funciones > xna <. Valores perdidos NA es el c´digo de “Not available”.0 El infinito y NaN (“not a number”) son diferentes de NA.na(v)] # sin los valores perdidos v == NA # !No funciona! ¿Por qu´? e Sustituir NA por.NA) is.rm = TRUE) ..9.nan(0/0).4. 0/0 > is. o > > > > v <. mean(xna) > mean(xna. -5/0. 2.na(v)] <. 4).ej.c(1. is. > 5/0. NA. is.4. p.na(v). 3.v[!is. na.na(v)) w <. 0: > v[is.infinite(-5/0). which(is.c(1.6.

no. etc.na.omit(XNA) .na <.Para “modelling functions” (ej.2. lm) lo mejor es usar na.omit na.exclude Esta ultima es m´s conveniente para generar predicciones.3. ´ a residuos.NA.4). nrow = 3) > XNA > X.matrix(c(1. Eliminar todos los NA: > XNA <.NA.

which. x) order y sort admiten decreasing = TRUE. 1. 2.4.c(1. . 4). 1. > > > > > > > > > Ordenaci´n de vectores o x1 <.c(5. 3.c(1. rank(x2) min(x1). 2).5. 3) order(x1) sort(x1) rev(x1) rank(x1) x1[order(x1)] x2 <. 2. 3. 2. which(x1 == min(x1)) y <. order(y. 8.min(x1).

Vectores de caracteres > codigos <.paste(LETTERS[1:5]. sep ="") > substr("abcdef".a <. gsub. grep. 2:3.") > juntar <paste(c("una".2. sep = "") > codigos <. collapse="") > substr(x.6.LETTERS[1:5]. sub. . 5) <.paste(c("A". sep = ". 2:3. match.4) > x <.b <. columna. "B"). collapse =" ") > columna. "simple"). "B"). regexpr.b.paste(columna. "frase". 3. toupper. pmatch.c("uv") Otras funciones de manipulaci´n de caracteres: o nchar.4. tolower.paste(c("A".a. columna.10:15 > juntar <.

un ANOVA o como si fuera un vector num´rico. Factores Consideremos el c´digo postal: o > codigo. > codigo. > y <. por ejemplo. 2) > aov(y ~ x) # !error! > aov(y ~ factor(x)) # funciona .rnorm(10). 28034).c(28430. > mode(codigo.factor(codigo.postal) # mejor Antes de utilizar un vector con caracteres dentro de un an´lisis.rep(letters[1:5]. R protesta.postal <. a hace falta convertirlo en un factor. En caso contrario. x <.postal) No deber´ ıamos usar el c´digo postal en. 28016.postal <.7.4. Usar variables aparentemente e num´ricas en an´lisis estad´ e a ısticos es un grave error.

"alto")) . "medio")) ftr1 ftr1 <.factor(c("alto".factor(x). y as.character(y)) # bien Podemos fijar el orden de las etiquetas: > > > + ftr1 <. "bajo".factor(c("alto". levels = c("bajo". y <. "bajo". "medio". 89. 1000).Si queremos convertir un vector factor en num´rico: e > > > > x <.numeric(as.numeric(y) # mal # los valores han sido recodificados as. "medio").c(34.

nrow = 5)# como en FORTRAN matrix(1:20. a o > > > > a1 a2 a3 a4 <<<<array(9. Tienen una funcionalidad muy parecida. 4) .1:24.1. dim = c(5.4.5. nrow = 5. dim(a4) <. Una matrix es un array con dos dimensiones.2) El vector a pasa a ser un array 3x4x2. Arrays y matrices Definiciones Un array es una colecci´n de datos del mismo tipo con varias o dimensiones.4)) matrix(1:20.c(5.c(3. pero matrix es m´s c´moda. 5. dim(a) <. byrow = TRUE) 1:20. > a <.

nrow = 2) > im > a4[im] .2]. a[1. 4)] Tambi´n se pueden dar las coordenadas matricialmente. ] # es un array de dimensi´n c(4. 3.4. a4[c(1.1]. ].matrix(c(1. c(2. Observar e el ejemplo: > im <. 2.1.1. 3). 4).2) o > a4[1. a4[. 2]. como en los vectores: > a[1.2] Tambi´n podemos considerar subconjuntos de un array e > a[2. . a[3.Con las coordenadas se obtienen los elementos particulares.

nrow=4.NULL) variables <.7."Lleida".1.223."Tarraco".80.210.c("Barna".50.list(ciudades."C") dimnames(datos) <. dim(datos) ciudades <.191.2.list(ciudades."Gi") dimnames(datos) <."C"] .c("A". ] datos[ .8.c(190."B".Ejemplo: > > > > > > > > > > x <.4.matrix(x.22.variables) datos dimnames(datos) datos["Barna".byrow=T).3) datos <.

Otro ejemplo: > > > > > > a4 <. 4) attributes(a4) colnames(a4) <. sep = ". c("v1".paste("id".ncol=4) > o.paste("v". 1:5. ] . 1:4.matrix(rnorm(20).c(5.1:20. dim(a4) <.matriz <.matriz[order(matriz[. 1]). "v3")] attributes(a4) Para ordenar un array por una columna: > matriz <. sep = "") rownames(a4) <.") a4[.

5. o solve(A) : inversa de la matriz A svd(A) : descomposici´n en valores singulares o qr(A) : descomposici´n QR o eigen(A) : valores y vectores propios diag(b) : matriz diagonal (b es un vector) diag(A) : matriz diagonal (A es una matriz) A %o% B == outer(A.b) : soluci´n del sistema de ecuaciones Ax=b.2.B) : producto exterior de dos vectores o matrices . Operaciones con matrices A %*% B : producto de matrices t(A) : transpuesta de la matriz A solve(A.

. method = "spearman") # better La funci´n cov2cor convierte “eficientemente” una matriz de o covarianzas en la correspondiente matriz de correlaciones. cov y cor calculan la varianza de x y la covarianza o correlaci´n de x y y si ´stos son vectores.cor(longley)) ## Graphical Correlation Matrix: symnum(Cl) # highly correlated > ## Spearman’s rho > cor(apply(longley. Cuando x y o e y son matrices. 2.Las funciones var. rank)) > cor(longley. entonces calculan las covarianzas (o correlaciones) entre las columnas de x y las columnas de y. > > > > data(longley) (Cl <.

paste(y. names(y) <. Y.1:9.2:8.La funci´n outer(X. "^") .. x.x # Multiplication & Power Tables x %o% x y <. > > > > > x <. names(x) <.sep="") outer(y.) proporciona por defecto el o producto exterior de los dos arrays.":". Sin embargo. .. podemos introducir otras funciones e incluso nuestras propias funciones. FUN="*".

diag(6) # matriz identidad a7 <.rbind(x1.cbind(x1. a8 <. x2). a6) # no funciona rbind(a4. x2) a24 <. x2 <. a4) cbind(a4.cbind(a2. a9) # no funciona . a9) rbind(a4.5. Combinaci´n de arrays o Para combinar vectores.1:10. > > > > > > > > > x1 <. nrow = 5) cbind(a4. matrices o arrays utilizamos las instrucciones rbind y cbind.matrix(rnorm(30).3.11:20 a6 <. a6) # no funciona a9 <.

cbind(x1.frame: > > > > a10 <.1. x3) ¿De qu´ tipo es a9? ¿Es eso lo que quer´ e ıamos? Mejor con un data. 6. x2. Data.letters[1:10] > a9 <.frames Definici´n o Para datos de diferentes tipos: > x3 <.2)])# comp. principales prcomp(a10[. -3]) .data. c("x1". x2.6. c(1. x3) prcomp(a10[.frame(x1. "x2")]) prcomp(a10[.

Tambi´n podemos a˜adir alguna columna a una matriz como e n datos: > playa <- c("si","si","no","no") > datos.df <- data.frame(datos,playa) > datos.df$playa Usar $ facilita el acceso y la creaci´n de nuevas columnas: o > > > > > > > set.seed(1) # fija la semilla del random number generator d1 <- data.frame(g1 = runif(10), g2 = rnorm(10)) d1$edad <- c(rep(20, 5), rep(40, 5)) set.seed(1) d2 <- cbind(g1 = runif(10), g2 = rnorm(10)) d2[, 3] <- c(rep(20, 5), rep(40, 5)) # error d2 <- cbind(d2, edad = c(rep(20, 5), rep(40, 5)))

Adem´s, en los data.frame los “character vectors” se convierten a en factores. Podemos convertir matrices a data.frame con as.data.frame(). Los data.frame tambi´n tienen rownames, colnames. e > attributes(a10) # cuando no est´n definidos a Tambi´n podemos usar dimnames(a10). e

6.2. > > > > > > > > > > >

La familia apply

ax <- matrix(rnorm(20), ncol = 5) medias.por.fila <- apply(ax, 1, mean) por.si.na <- apply(ax, 1, mean, na.rm = TRUE) mi.f1 <- function(x) { return(2*x - 25)} mi.f1.por.fila <- apply(ax, 1, mi.f1) mas.simple <- apply(ax, 1, function(x){return(2*x -25)}) medias.por.columna <- apply(ax, 2, mean) sample.rows <- apply(ax, 1, sample) dos.cosas <- function(y){return(c(mean(y), var(y)))} apply(ax, 1, dos.cosas) t(apply(ax, 1, dos.cosas))

Utilizar apply es generalmente mucho m´s eficiente que un bucle. a Adem´s de m´s claro, m´s f´cil, etc.. a a a a > > > > parameters <- cbind(mean = -5:5, sd = 2:12) z.data <- matrix(rnorm(1000 * 11), nrow = 11) data <- (z.data * parameters[,2]) + parameters[,1] apply(data, 1, mean); apply(data, 1, sd)

Las funciones sapply(X,funci´n) y lapply(X,funci´n) son como o o apply(x,i,funci´n) pero no hay que especificar el ´ o ındice i=2; sapply intenta simplificar el resultado a un vector o a una matriz (la “s” es de “simplify”), pero lapply siempre devuelve una lista. Ambas pueden aplicarse a vectores, listas, arrays. > data(airquality) > sapply(airquality, function(x)sum(is.na(x)))

f´cil de entender.y.tapply(x. median(m1). median(d1) . sapply.data.matrix(1:20.funci´n) calcula la funci´n especificada o o o sobre el objeto x seg´n las categor´ de y.frame(m1) mean(x1).20. lapply y tapply son funciones muy utiles que ´ contribuyen a hacer el c´digo m´s legible.5).23.rep("B".18) trat <. y o a a facilitan posteriores modificaciones y aplicaciones.15.as. sd(x1).media apply.5)) x.19.14. Consejo: Cada vez que vayamos a usar un “loop” intentemos substituirlo por alg´n miembro de familia apply.1:10 m1 <.media <.17. u Algunas funciones hacen un apply: > > > > x1 <. u ıas > > > > x <.trat.mean) x.c(19.La funci´n tapply(x. sd(d1).c(rep("A". mean(d1).19.21. ncol = 5) d1 <.

cbind(expand.grid(var1.table(calif.5.grid( calif=c("mejor". o > + + > > > resultado <.7.34."peor".tratam)*frec tabla . Tablas La tabulaci´n cruzada de dos variables cualitativas se consigue o con la funci´n table. o > table(sexo.c(21."igual")."B"))) frec <. tratam=c("A". Las variables se definen con sus modalidades o con la instrucci´n expand.3.14) tabla <.nivel) Para introducir una tabla de contingencia tambi´n se utiliza la e instrucci´n table.6.var2).12.

-3]) max.vars <.data.classes = tabla.frame(g1=runif(10).g2=rnorm(10).vars = las. factor. rep("d". row.fun <.total <.mean(x[. 3]) return(list(row.medias. maximum = max. 2).6.vars. id1 = c(rep("a".total.fun(d3) .max(x[. rep("b".clases)) } my. > + + > + + + + + + + + > Ejemplo d3 <.means = las. -3]) las.function(x) { las. -3]) tabla. 3).table(x[.medias <. 3))) my. 2).4.var(x[.clases <. rep("c".

fun(d3). names(una.list(NULL).lista una.lista[[4]] una. otro.lista) unlist(otra.lista).lista[4] # ¿por qu´ sale el nombre? class e una.lista attributes(una.list(cucu = 25.lista <.lista) length(una.my.lista[[3]] <.lista$factor.7.elemento = "una frase") . drop = FALSE) una.1.lista <. una.lista. > > > > > > > > > > > > > > Muchos objetos Listas una.lista # hemos eliminado el "slot" maximum unlist(una. una.lista) una.lista. una.c(una.lista <.lista) otra.lista) unlist(otra.NULL una. 7.classes una.lista[[3]] <.

Cargar un paquete extiende la “search list”. llamados “databases”: > search() > library(MASS) > search() . Para obtener la lista de los directorios. Los objetos que tenemos Para saber los objetos que hemos definido hacemos > ls() > objects() > objects(pattern="a*") R tiene una lista donde buscar los objetos accesibles: “the search list”.7.2.

df) A # ahora s´ ı plot(A. > > > > > str(datos.df$D <. esto permite acceder directamente a las columnas por su nombre.df) # es un data.frame A # error attach(datos.frame.df$B) La actualizaci´n no es din´mica o a > datos.datos. En el caso de un data.B) # en lugar de plot(datos.Para que un objeto o directorio sea f´cilmente accesible lo a podemos poner en la “search list” de R.df # aqu´ est´ ı a > D # pero aqu´ no ı Para desconectar > detach(objeto) .1:4 # una nueva columna > datos.df$A.

funciones.RData con objetos diversos (datos. la segunda o los carga todos.. La primera instrucci´n accede a los objetos cuando se requieren. > load("nombre...RData") .Para borrar objetos concretos > rm(objetos) Para borrar todos los objetos del entorno de trabajo: > rm(list = ls()) Para cargar un archivo nombre.) se puede hacer un attach o un load.

es mejor evitar attach y acceder siempre a las variables usando su localizaci´n expl´ o ıcita y completa.df A <. . como un an´lisis que se o a prolonga dos semanas.1 A # usa la ´ltima u search() # el search path detach(datos.df) D A # cuidado Conclusi´n: En “entornos confusos”.df) attach(datos.¡Alerta! > > > > > > > > datos.

etc. condiciones a que pueden implicar a un n´mero arbitrario de variables y casos).. o u cadenas de caracteres. u Los data. etc. adem´s. a n Por tanto. El indexado y selecci´n de casos pueden usar n´meros. casos. Podemos verificar “al vuelo” que estas transformaciones hacen lo que queremos que hagan (mirando selectivamente los resultados. no hay muchas a .7. juntarse. etc. Podemos preparar c´digo que repita las mismas operaciones con o datos semejantes (i.3.frames y las matrices pueden separarse. de acuerdo con criterios arbitrarios (que usan. factores. podemos automatizar el proceso con sencillez). En resumen La manipulaci´n de datos en R es muy flexible. subsecciones de datos. una vez que los datos est´n en R. o “emulando” el proceso en unos datos artificiales m´s peque˜os). cambiarse de forma (reshape). o Podemos seleccionar variables.e.

. Perl) para luego volver a leerlos en R..razones para exportarlos y hacer la selecci´n y manipulaci´n con o o otros lenguajes (ej. Python.

1. Datos Lectura de datos Para leer un fichero simple. por ej.. se utiliza la instrucci´n o read..fichero". read. con los datos separados por espacios en blanco. Hay funciones especializadas para otros archivos (ej.8.char = "") Si el car´cter decimal no es un punto sino.table en la forma: > fichero. + comment. + header = TRUE. .". tabuladores o saltos de l´ ınea.csv) pero son casos espec´ ıficos de read. una coma.table("c:/dir/mi. sep = "". 8. a usar: dec = ".read.df <.table. Se pueden saltar l´ ıneas (skip) o leer un n´mero fijo de l´ u ıneas (nrows).

runif(20) > y <. y.RData") . b = TRUE. file = "xy. Guardar y leer datos Resulta muy importante poder guardar datos. > x <. para ser usados en otras sesiones de R.2. funciones.RData") Los leeremos con > load("xy. etc. Esos datos as´ guardados ı pueden compartirse con otros usuarios e incluso utilizarse en distintos sistemas operativos.. c = "patata") > save(x.8.list(a = 1.

RData" > save. La instrucci´n data permite cargar archivos de las librer´ o ıas disponibles. R y muchos otros paquetes incorporan archivos con datos: Se cargan con load("nombre.Podemos guardar todos los objetos con > save.image(file = "nombre. package = "base") # equivalente ?iris .RData se carga al iniciarse R.image() # guardado como ". > > > > data() # muestra todos los archivos data(iris) data(iris.RData").RData") El fichero .

. Cuidado con las ´ltimas columnas y missing data (Excel elimina u los “trailing tabs”). o Importamos en R con read. • Poner una ultima columna con datos arbitrarios (ej.. Dos formas de minimizar problemas: • Usar NA para missing.3. Salvamos como texto (s´lo salvamos una de las hojas). Importar datos de Excel Lo mejor es exportar los datos desde Excel a un archivo de texto separado por tabuladores. una ´ columna llena de 2s).table.8. Cuidado tambi´n con l´ e ıneas extra al final del fichero.

+ append = FALSE) Pero para exportar un data.txt".frame.8.4.names = NA) . Exportar datos Lo m´s sencillo es exportar una matriz a (es necesario transponer la matriz).row. file = "c:/dir/data.txt".names = TRUE) Para escribir un fichero CSV importable desde Excel > + write.table(my.csv". sep = ".data.output. + ncolumns = n. + file = "mi.".names = FALSE. col.frame es mejor > write. file = "foo. > write(t(x).table(x. + sep = "". + col.

9. 9.1.

Gr´ficos a Introducci´n o R incluye muchas y variadas funciones para hacer gr´ficos. a El sistema permite desde gr´ficos muy simples a figuras de calidad a para incluir en art´ ıculos y libros. S´lo examinaremos la superficie. M´s detalles en el libro R o a Graphics de Paul Murrell. Tambi´n podemos ver un buen conjunto de ejemplos con e demo(graphics). El comando plot es uno de los m´s utilizados para realizar a gr´ficos. a

9.2.

El comando plot Si escribimos plot(x, y) donde x e y son vectores con n coordenadas, entonces R representa el gr´fico de dispersi´n con a o los puntos de coordenadas (xi , yi ). Este comando incluye por defecto una elecci´n autom´tica de o a ejes, escalas, etiquetas de los ejes, densidad de las l´ ıneas, etc., que pueden ser modificados a˜adiendo par´metros gr´ficos al n a a comando y que pueden visualizarse con help(par). > > + + x <- runif(50, 0, 4); y <- runif(50, 0, 4) plot(x, y, main = "T´tulo principal", ı sub = "subt´tulo", xlab = "eje x", ylab = "eje y", ı xlim = c(-5,5),ylim = c (-5,5))

Variaciones de plot: > > > > > > > > > + + z <- cbind(x,y) plot(z) plot(y ~ x) plot(log(y + 1) ~ x) # transformaci´n de y o plot(x, y, type = "p") plot(x, y, type = "l") plot(x, y, type = "b") plot(c(1,5), c(1,5)) legend(1, 4, c("uno", "dos", "tres"), lty = 1:3, col = c("red", "blue", "green"), pch = 15:17, cex = 2)

Con text podemos representar caracteres de texto directamente: > sexo <- c(rep("v", 20), rep("m", 30)) > plot(x, y, type = "n") > text(x, y, labels = sexo)

cex = 2. rep(1. cex = 2. pch = 21:30. 10). 10). type = "n". pch = 11:20. col = "red") Tipos de puntos. lwd = 2) for(i in 1:10) abline(0. pch = 3. 10). pch = 1:10. bg = "yellow") Tipos de l´ ıneas. > + > > > + plot(c(1. lwd = 2) . i/5. i/5. xlab = "". 10). 10). > points(x. col = "red") points(1:10. col = "blue") points(1:10. axes = FALSE. c(1. xlab ="". rep(2.Puntos. 10). lty = i. ylab ="") for(i in 1:10) abline(0. c(0. y. cex = 2. type = "n". > + > + > + plot(c(0. 3). rep(3. col = "blue". ylab="") points(1:10. lty = i.

a . a la anotaci´n de o los ejes. colors. etc. Hay muchos m´s colores.lab). Ver palette.lty permite especificaciones m´s complejas (longitud de los a segmentos que son alternativamente dibujados y no dibujados). cex.axis. par controla muchos par´metros gr´ficos. Por ejemplo. otro. cex puede a a referirse a los “labels” (cex.

1:10 y <. y) > locator() > text(locator(1). adj = 0) .3. y. y) identify(x. > plot(x. etiquetas) identifica los puntos con el rat´n y escribe o la correspondiente etiqueta. ". Identificaci´n interactiva de datos o identify(x.".paste("punto". "el marcado". labels = nombres) locator() devuelve las coordenadas de los puntos. y. x. y.9. > > > > > x <.sample(1:10) nombres <. sep ="") plot(x.

rnorm(5)) plot(runif(10)) plot(rnorm(10). secc. 30). a a La funci´n m´s flexible y sofisticada es split. > > > > > par(mfrow = c(2. 4.9. bien o a explicada en R para principiantes.1. rnorm(10)) Podemos mostrar muchos gr´ficos en el mismo dispositivo gr´fico. 2)) plot(rnorm(10)) plot(runif(5). M´ltiples gr´ficos por ventana u a Empezamos con par(mfrow=c(filas.screen.2 (p.columnas)) antes del comando plot. .4.

matrix(rnorm(1000). data = Y) La librer´ lattice permite lo mismo. "edad". o u > > + > X <.frame(X) Y$sexo <. que coplot.factor(c(rep("Macho". "loc". ıa a Ver secc. data = Y) coplot(weight ~ edad | loc * sexo. 4.6 de R para principiantes.5. y mucho m´s. data = Y) coplot(weight ~ edad | loc. "id".9. a > > + > > > Y <.data. . 80). "weight") pairs(X) Gr´ficos condicionados (revelan interacciones).as.c("a". rep("Hembra". Datos multivariantes Diagrama de dispersi´n m´ltiple.as. 120))) coplot(weight ~ edad | sexo. ncol = 5) colnames(X) <.

V´ase la ayuda ?boxplot. Boxplots Los diagramas de caja son muy ´tiles para ver r´pidamente las u a principales caracter´ ısticas de una variable cuantitativa.9. e . etc. weight) detach() boxplot(weight ~ sexo. col = c("red". mostrarlos horizontalmente. "blue")) La funci´n boxplot tiene muchas opciones. data = Y.6. o comparar entre variables. en una matriz de boxplots. se puede modificar el o aspecto. > > > > > + attach(Y) boxplot(weight) plot(sexo.

replace = TRUE) dc2 <. jitter(dc2)) . 500.sample(1:5.dc1 + sample(-2:2. 3. Un poco de ruido Los datos cuantitativos discretos pueden ser dif´ ıciles de ver bien. 2.7. n > > + > > dc1 <. dc2) plot(jitter(dc1). 2. replace = TRUE. Podemos a˜adir un poco de ruido con el comando jitter. prob = c(1.9. 500. 1)/9) plot(dc1.

9. > > > > > > x <. y) abline(lm(y ~ x).8. adem´s de n a a leyendas y l´ ıneas rectas. Dibujar rectas Podemos a˜adir muchos elementos a un gr´fico. y). y) lines(lowess(x. etc). lattice. lty = 3) Podemos a˜adir otros elementos con “panel functions” en otras n funciones (como pairs. .rnorm(50) plot(x. lty = 2) plot(x.rnorm(50) y <.

org. M´s gr´ficos a a Podemos modificar m´rgenes exteriores de figuras y entre figuras a (v´ase ?par y b´squense oma.ac. a a o usados para comparar la distribuci´n de dos variables.ggobi. mar. http://www. mai..r-project. histogramas: hist. qq. gr´ficos de comparaci´n de cuantiles.3 y 12. secc. Notaci´n matem´tica (plotmath) y expresiones de texto o a arbitrariamente complejas.html.4.org/src/contrib/Descriptions/xgobi. distribuci´n o a o normal): qqplot.mcs.5. qqnorm y. contour. ejemplos en An e u introduction to R. 12. image. en paquete car. e a gr´ficos de barras: barplot. .9. http://www.9.5.plot. o la o disribuci´n de unos datos frente a un est´ndar (ej. Tambi´n gr´ficos 3D: persp.nz/~ ray/R-stuff/windows/gguide. Ver: a a http://cran.vuw. omi.pdf. Gr´ficos tridimensionales din´micos con XGobi y GGobi.

pdf". podemos copiar una figura a un fichero. > plot(runif(50)) > dev.off() O bien. Tambi´n podemos especificar donde queremos guardar el gr´fico. e a > pdf(file = "f1. podemos usar los men´s y guardar con distintos u formatos.10.copy2eps() . height = 10) > plot(rnorm(10)) > dev.9. Guardar los gr´ficos a En Windows. width = 8.

10. u a Ejemplo: Suma de una progresi´n aritm´tica o e > suma <.d. un vector.function(a1.a1+(n-1)*d. + ((a1+an)*n)/2} . Una funci´n o se define con una asignaci´n de la forma o > nombre <. una gr´fica.n){ + an <.function(arg1. una lista o un mensaje. 10....1. El valor de dicha expresi´n es el o valor que proporciona R en su salida y ´ste puede ser un simple e n´mero.){expresi´n} o La expresi´n es una f´rmula o grupo de f´rmulas que utilizan los o o o argumentos para calcular su valor.arg2. Funciones Definici´n de funciones o R es un lenguaje que permite crear nuevas funciones.

10.f(4.c = 4.d = FALSE){x1<-a*z .e. a = 4) Pero los argumentos con nombre siempre se tienen que dar despu´s de los posicionales: e > una. si los nombramos.function(a. Podemos especificarlos nosotros o no (i.f(b = 5. .f <. usar los valores por defecto).. Argumentos Una funci´n con cuatro argumentos o > una. 5) > una.2.b. 5) # error Los argumentos c y d tienen valores por defecto. podemos darlos en cualquier orden: > una.} Los argumentos a y b tienen que darse en el orden debido o..f(c = 25. 4..

o “..function(x.args(nombre.y){cos(y)/(x^2-3)} > z <. 1:5) > f3(1:5. 1:5.){ + plot(x. .y.function(x. label = "la x".f) .. .outer(x. xlab = label.funcion) nos muestra los argumentos de cualquier funci´n..” permite pasar argumentos a otra funci´n: o > f3 <. y. col = "red") Para realizar funciones de dos variables se puede utilizar el comando outer. Por ejemplo: > f <...)} > > f3(1:5. y..

Scope En la funci´n una.html y secci´n 10. Ver documento Frames. Un ejemplo > + + + cubo <.7 en An introduction to R. environments and scope in R and S-PLUS de J.3.function(n) { sq <.10.function() n*n # aqu´ n no es un argumento ı n*sq() } En esto R (lexical scope) y S-PLUS (static scope) son distintos. . Tambi´n ver o e demo(scoping).r-project. Fox en http://cran.org/doc/contrib/Fox-Companion/appendix.f “z” es una “free variable”: ¿c´mo se o o especifica su valor? Lexical scoping.

e. despu´s de if(..) o e for(.).10...expr) puede ser una expresi´n o e o simple o una de las llamadas expresiones compuestas. expr2}..4.. normalmente del tipo {expr1. i. Control de ejecuci´n o Principales instrucciones if(cond) expr if(cond) cons. Uno de los errores m´s habituales es el olvido de los corchetes a {.} alrededor de las instrucciones. .expr La expresi´n expr (tambi´n alt.expr else for(var in seq) expr while(cond) expr repeat expr break next alt..

TRUE).even <.alternativa o o > + + + + + + f4 <.function(x) { if(x > 5) print("x > 5") else { y <.if (cond. nrow = 2) ifelse(mtf.function(x) { ifelse(x %% 2 == 1. FALSE. y)) } } ifelse es una versi´n vectorizada (Thomas Untern¨hrer. R-help. 1) . "Odd".runif(1) print(paste("y is ". TRUE.matrix(c(TRUE. o a 2003-04-17) > + + > + > odd. "Even") } mtf <.logica) instrucci´n else instrucci´n. 0.

loop in valores) instrucci´n o > for(i in 1:10) cat("el valor de i es".TRUE x <. "\n") > > > + + + + continue.0 while(continue.loop <.loop) { x <.x + 1 print(x) if( x > 10) continue.loop <.for (variable. i.FALSE } break para salir de un loop. .

. traceback() nos informa de la secuencia de llamadas antes del “crash” de nuestra funci´n. con “n” paso a paso. Cuando algo va mal Cuando se produce un error.function) > . o > debug(my. si o otra tecla sigue la ejecuci´n normal.10. Es o u ´til cuando se producen mensajes de error incomprensibles.5. “Q” para salir. o debug es como poner un broswer al principio de la funci´n y se o ejecuta la funci´n paso a paso. o o browser interrumpe la ejecuci´n a partir de ese punto y permite o seguir la ejecuci´n o examinar el entorno.buggy.function) . Se sale con “Q”. > undebug(my..buggy. Cuando se producen errores o la funci´n da resultados incorrectos o o “warnings” indebidos podemos seguir la ejecuci´n de la funci´n.

y) { z <.f2 <.Ejemplo: > + + > > > > > my.f2(runif(3). 1:4) undebug(my.z * y + y3 <. 1:4) debug(my.f2) my.z * y * x + return(y3 + 25) } my.function(x.rnorm(10) + y2 <.f2) # insertar un browser() y correr de nuevo .f2(runif(3).

fichero. Ver Writing R a extensions.R source es en ocasiones m´s ´til porque informa inmediatamente de a u errores en el c´digo. .R.codigo. echo = TRUE).file.con. o Ver la ayuda: Rcmd BATCH --help Puede que necesitemos expl´ ıcitos print statements o hacer source(my. sink es el inverso de source (lo manda todo a un fichero). Ejecuci´n no interactiva o Con source abrimos una sesi´n de R y hacemos o > source("mi. que se comporten igual que los dem´s paquetes.10. Se pueden crear paquetes.6.codigo.con. BATCH no informa.fichero. con nuestras funciones. pero no requiere tener o abierta una sesi´n (se puede correr en el background).R") Con BATCH: Rcmd BATCH mi.

do.call.Call..). las S3 classes y las S4 classes. etc. . . o a No hemos mencionado el “computing on the language” (ej. eval. Ver o . . Dos implementaciones. “Lexical scoping” importante en programaci´n m´s avanzada.C.R puede llamar c´digo compilado en C/C++ y FORTRAN.Fortran. R es un verdadero “object-oriented language”.