R para Principiantes

Emmanuel Paradis
´ Institut des Sciences de l’Evolution Universit Montpellier II F-34095 Montpellier cdex 05 France E-mail: paradis@isem.univ-montp2.fr

traducido por

Jorge A. Ahumada
RCUH/ University of Hawaii & USGS/ National Wildlife Health Center E-mail: jahumada@usgs.gov

´ Quiero agradecerle a Julien Claude, Christophe Declercq, Elodie Gazave, Friedrich Leisch y Mathieu Ros por sus comentarios y sugerencias en versiones anteriores de este documento. Tambi´ n estoy muy agradecido con los miembros del grupo nuclear de programadores de R por e ´ sus esfuerzos considerables en el desarrollo de R y su animo en la lista de discusi´ n ‘rhelp’. o Gracias a todos los usuarios de R cuyas preguntas y comentarios me ayudaron a escribir ’R para prinicpiantes’. c 2002, Emmanuel Paradis (3 de marzo de 2003)

1

´ndice I
1. Pr´ logo o 2. Algunos conceptos antes de comenzar 2.1. C´ mo funciona R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o 2.2. Creaci´ n, listado y remoci´ n de objetos en memoria . . . . . . . . . . . . . . . . o o 2.3. La ayuda en l´nea . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ı 3. Manejando Datos con R 3.1. Objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2. Leyendo datos desde un archivo . . . . . . . . . . . . . . . . . . . . . 3.3. Guardando datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.4. Generaci´ n de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . o 3.4.1. Secuencias regulares . . . . . . . . . . . . . . . . . . . . . . . 3.4.2. Secuencias aleatorias . . . . . . . . . . . . . . . . . . . . . . . 3.5. Manipulaci´ n de objetos . . . . . . . . . . . . . . . . . . . . . . . . . o 3.5.1. Creaci´ n de objetos . . . . . . . . . . . . . . . . . . . . . . . . o 3.5.2. Conversi´ n de objetos . . . . . . . . . . . . . . . . . . . . . . o 3.5.3. Operadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.5.4. C´ mo acceder los valores de un objeto: el sistema de indexaci´ n o o 3.5.5. Accediendo a los valores de un objeto con nombres . . . . . . . 3.5.6. El editor de datos . . . . . . . . . . . . . . . . . . . . . . . . . 3.5.7. Funciones aritm´ ticas simples . . . . . . . . . . . . . . . . . . e 3.5.8. C´ lculos con Matrices . . . . . . . . . . . . . . . . . . . . . . a 4. Haciendo gr´ ficas en R a 4.1. Manejo de gr´ ficos . . . . . . . . . . . . . . . a 4.1.1. Abriendo m´ ltiples dispositivos gr´ ficos u a 4.1.2. Disposici´ n de una gr´ fica . . . . . . . o a 4.2. Funciones gr´ ficas . . . . . . . . . . . . . . . a 4.3. Comandos de graficaci´ n de bajo nivel . . . . . o 4.4. Par´ metros gr´ ficos . . . . . . . . . . . . . . . a a 4.5. Un ejemplo pr´ ctico . . . . . . . . . . . . . . . a 4.6. Los paquetes grid y lattice . . . . . . . . . . . 5. An´ lisis estad´sticos con R a ı 5.1. Un ejemplo simple de an´ lisis de varianza a 5.2. F´ rmulas . . . . . . . . . . . . . . . . . o 5.3. Funciones gen´ ricas . . . . . . . . . . . . e 5.4. Paquetes . . . . . . . . . . . . . . . . . . 3 4 4 6 7 9 9 10 13 14 14 16 17 17 21 22 23 25 25 25 27 29 29 29 30 32 33 35 36 40 46 46 48 49 52 54 54 56 57 59

. . . . . . . . . . . . . . .

. . . . . . . . . . . . . . .

. . . . . . . . . . . . . . .

. . . . . . . . . . . . . . .

. . . . . . . . . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

6. Programaci´ n pr´ ctica con R o a 6.1. Bucles y Vectorizaci´ n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o 6.2. Escribiendo un programa en R . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.3. Creando sus propias funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . 7. Literatura adicional sobre R

2

edu/S/ 3 . el usuario puede extraer solo aquella parte ı de los resultados que le interesa. a ´ es util para el principiante adquirir algunas nociones y conceptos y asi avanzar progresivamente. esencialmente para m´ quinas Unix y Linux. que tambi´ n se distribuyen a e con el programa. S est´ disponible como a el programa S-PLUS comercializado por Insightful2 . Al principio. los binarios o ´ est´ n disponibles generalmente para las versiones m´ s actualizadas de estas y de R.org/doc/FAQ/R-FAQ. . algunas veces con la ayuda de tablas.html para m´ s informaci´ n e a o 3 http://cran. n ´ pero esta caracter´stica suele ser muy util. ´ R es un sistema para analisis estad´sticos y gr´ ficos creado por Ross Ihaka y Robert Gentleı a man1 . R se distribuye gratuitamente bajo los t´ rminos de la GNU General Public Licence4 . Linux (Debian.r-project. coeficientes de regresi´ n. Tambi´ n es posible combinar en un solo programa diferentes e funciones estad´sticas para realizar an´ lisis m´ s complejos. o ser utilizados en an´ lisis posteriores. 1996. de tal manera que se puede hacer un an´ lisis sin nea cesidad de mostrar su resultado inmediatamente. . Para las diferentes distribuciones de Linux (Debian. o como archivos binarios prea compilados para Windows. Mientras que programas m´ s cl´ sicos muestran directamente los resultados de un an´ lisis. SuSe). He tratado de simplificar las explicaciones al m´ ximo para hacerlas lo m´ s comprensivas posibles. pictex. Esto no es cierto necesariamente. 2 v´ ase http://www. a El lenguaje R permite al usuario. R puede parecer demasiado complejo para el no-especialista. Esto puede ser un poco extra˜ o para el usuario.org/ o 5 http://cran. con el objeto de que se pueda usar de una manera b´ sica. . estos ultimos pueden ser via ı a sualizados de manera inmediata en su propia ventana y ser guardados en varios formatos (jpg. .insightful. programar bucles (’loops’ en ingl´ s) para anae lizar conjuntos sucesivos de datos. ´ Prologo El objetivo de este documento es proporcionar un punto de partida para personas interesadas ´ en comenzar a utilzar R. ps. y algunos resultados intermea ı dios (como valores P-.gnu. ). ´ R posee muchas funciones para an´ lisis estad´sticos y gr´ ficos. Journal of Computational and Graphical Statistics 5: 299–314. xfig. Mandrake. Dado que R ofrece una amplia gama de posibilidades. .1. Los resultados de an´ lisis estad´sticos se muestran en la pantalla. emf. bmp.cmu. si uno corre una serie de 20 regresiones y quiere 1 Ihaka R. Macintosh y Alpha Unix. a a ´ pero al mismo tiempo proporcionando detalles utiles. ) se pueden guardar. . su desae rrollo y distribuci´ n son llevados a cabo por varios estad´sticos conocidos como el Grupo Nuclear o ı de Desarrollo de R. los formatos disponibles dependen del sistema operativo). R est´ disponible en varias formas: el c´ digo fuente escrito principalmente en C (y algunas a o rutinas en Fortran).com/products/splus/default. pdf.html 4 para mayor informaci´ n: http://www.6 la mayor´a de estos u ı pueden ser utilzados directamente con R. Usuarios de R tienen a su disponibiı a a lidad un gran n´ mero de programas escritos para S y disponibles en la red.org/ 6 por ejemplo: http://stat. visite el sitio a a CRAN si es necesario.r-project. ya sea desde las fuentes o binarios pre-compilados. exportar a un o archivo. a a a R guarda estos resultados como un “objeto”. He escogido hacer enfasis en el funcionamiento de R. R tiene una naturaleza doble de programa y lenguaje de programaci´ n y es considerado o como un dialecto del lenguaje S creado por los Laboratorios AT&T Bell. De hecho. R: a language for data analysis and graphics. por ejemplo. Los archivos necesarios para instalar R. png. residuales. De hecho. se distribuyen desde el sitio de internet Comprehensive R Archive Network (CRAN)5 junto con las instrucciones de instalaci´ n. RedHat. Existen diferencias importantes en el dise˜ o n de R y S: aquellos interesados en averiguar m´ s sobre este tema pueden leer el art´culo publicado a ı por Ihaka & Gentleman (1996) o las Preguntas M´ s Frecuentes en R3 . & Gentleman R. Por ejemplo. una de las caracter´sticas m´ s sobresalientes de R es su enorme flexibiı a lidad.

.funciones y operadores  . a menos que se indique lo contrario en el texto. ls()). y finalmente veremos c´ mo usar la ayuda en l´nea. . Pascal. . una regresi´ n a o lineal se puede ejecutar con el comando lm(y ˜x).. R mostrar´ el o e a contenido (c´ digo) mismo de la funci´ n. el programa se puede iniciar corriendo el archivo ejecutable correspondiente. mientras que un programa cl´ siı a co le puede abrir 20 ventanas de resultados. la cual a diferencia de las o ı ´ ayudas en otros programas estad´sticos. miraremos como manejar estos e objetos en memoria. Posteriormente. ı ´ 2. cuando se utiliza R por primera a ´ vez.. veremos otros ejemplos que ilustran y a comparan la flexibilidad de R con programas de estad´stica m´ s tradicionales. veremos brevemente como funciona R. librer´a de ı funciones ?  “datos” objetos     ) pantalla 6 ? “resultados” objetos  XXX XXX z X datos archivos internet PS JPEG . Para que una funci´ n sea ejecutada en R o debe estar siempre acompa˜ ada de par´ ntesis.. Como segunda medida. Por ejemplo. El hecho que R es un lenguaje de programaci´ n puede desaminar a muchos o usuarios que piensan que no tienen “alma de programadores”. C++. inclusive en el caso que no haya nada dentro de los n e mismos (por ej. De hecho. buscar ayuda en l´nea. . En Windows.1.. o a ´ comparar los coeficientes de regresi´ n. Como primera medida. describir´ el operador “asignar” el cual permite crear objetos en R. que por defecto es el s´mbolo ‘>’. Memoria activa Disco duro Figura 1: Una visi´ n esquem´ tica del funcionamiento de R. Algunos conceptos antes de comenzar Una vez instale R en su computador... El cursor.teclado rat´ n o comandos . R le puede mostrar unicamente los coeficientes estimados: o de esta manera los resultados se pueden resumir en una sola l´nea. un nuevo usuario de ı R probablemente estar´ pensando “Y ahora que hago?”. Esto no es necesariamente cierto por dos razones. ). es muy util tener una idea general de como funciona y eso es precisamente lo que vamos a hacer ahora. Como funciona R R es un lenguaje Orientado a Objetos: bajo este complejo t´ rmino se esconde la simplicidad e y flexibilidad de R. Fortran. En este punto. ı a 2. . o o En este documento. ). M´ s adelante. indica que R est´ listo para ı a recibir un comando. abrir archivos. Si se escribe el nombre de la funci´ n sin los par´ ntesis. se escribir´ n los nombres de las funciones con par´ ntesis para distinguirlas a e de otros objetos. la sint´ xis de R es muy simple e intuitiva./library/base/ /ctest/ . es bastante util e intuituva. .. algunos comandos pueden ser ejecutados a trav´ s de los menus e interactivos (por ej. Primero R es un lenguaje interpretado (como Java) y no compilado (como C. lo cual significa que los comandos escritos en el teclado son ejecutados directamente sin necesidad de construir ejecutables. 4 .

como por o ejemplo dentro de una funci´ n o un bucle). guardar en un objeto o escribir directamente en el disco (particularmente para gr´ ficos). se guardan en la memoria activa del computador en forma de objetos con un nombre espec´fico. o El nombre de un objeto debe comenzar con una letra (A-Z and a-z) y puede incluir letras. Veremos m´ s tarde en detalle como usar y construir o a funciones (p. Este archivo est´ en formato ASCII y contiene todas las funciones del paquete. ). La lectura y escritura de archivos solo se realiza para la entrada y salida de datos y resultados (gr´ ficas. resultados. y el ejemplo anterior es similar a o print(n) (en algunas situaciones la funci´ n print debe ser usada explicitamente. 5 . l´ gicos. pueden ser considerados como datos y analizados como tal. f´ rmulas. y veremos los detalles m´ s adelante (p. algunas u a funciones gr´ ficas y algunas funciones estad´sticas (regresi´ n lineal y an´ lisis de varianza). 57). existe el archivo R HOME/library/base/R/base). Este directorio contiene paquetes de funciones. . El uso y funcionamiento de los operadores es relativamente intuitivo. y comparativos) e o y funciones (que a su vez son objetos). datos. .). ). o porque a la funci´ n realmente no tiene argumentos. para el paquete base. 1). El usuario ı puede modificar o manipular estos objetos con operadores (aritm´ ticos. Por a ejemplo. a las cuales a su vez est´ n estructuradas en directorios. d´gitos (0-9). R discrimina entre letras may´ sculas y min´ sculas para el nombre de ı u u un objeto. Por ahora esta corta descripci´ n es suficiente para entender el funcionamiento o b´ sico de R. expresiones. a El comando m´ s simple es escribir el nombre de un objeto para visualizar su contenido. . 22). Una funci´ n en R se puede delinear de la siguiente manera: a o argumentos −→ opciones −→ ´ funcion ↑ argumentos por defecto =⇒resultado Los argumentos pueden ser objetos (“datos”. Archivos que contengan datos pueden ser leidos directamente desde el disco local o en un servido remoto a trav´ s de la red. si un objeto n contiene el valor 10: > n [1] 10 El d´gito 1 indica que la visualizaci´ n del objeto comienza con el primer elementp de n. funciones. etc. algunos de los cuales o pueden ser definidos por defecto en la funci´ n. Los resultados se pueden visualizar directamente en la pantalla. . El paquete denominado base constituye el a n´ cleo de R y contiene las funciones b´ sicas del lenguaje para leer y manipular datos.. de tal manera que x y X se refiere a objetos diferentes (inclusive bajo Windows).Orientado a Objetos significa que las variables. ya o sea porque todos est´ n definidos por defecto (y sus valores modificados con opciones). Cada a ı o a paquete contiene un directorio denominado R con un archivo con el mismo nombre del paquete (por ejemplo. e Las funciones disponibles est´ n guardadas en una librer´a localizada en el directorio R HOME/library a ı (R HOME es el directorio donde R est´ instalado). sin embargo estos argumentos pueden ser modifio cados por el usuario con opciones. sin usar archivos temporales (Fig. . El usuario ejecuta las funciones con a la ayuda de comandos definidos. a Todas las acciones en R se realizan con objetos que son guardados en la memoria activa del ordenador. Este ı o comando constituye un uso implicito de la funci´ n print. Una funci´ n en R puede carecer totalmente de argumentos. . y puntos (. Debido a a que los resultados mismos son objetos.

n2 <.0.2. n1 <.10 1 10 Si el objeto ya existe.10. 16). su valor anterior es borrado despu´ s de la asignaci´ n (la modificaci´ n e o o afecta solo objetos en memoria. m <. listado y remocion de objetos en memoria Un objeto puede ser creado con el operador “assignar” el cual se denota como una flecha con el signo menos y el s´mbolo “>” o “<” dependiendo de la direcci´ n en que asigna el objeto: ı o > n > n [1] > 5 > n [1] > x > X > x [1] > X [1] <."Carmen". Note que se puede escribir una expresi´ n sin asignar su valor a un objeto.100. Si se ı quiere listar solo aquellos objetos que contengan un caracter en particular. Creacion.´ ´ 2.15 15 -> n 5 <. o en este caso el resultado ser´ visible en la pantalla pero no ser´ guardado en memoria: a a > (10 + 2) * 5 [1] 60 La asignaci´ n ser´ omitida de los ejemplos si no es necesaria para la comprensi´ n del mismo.5 > ls() [1] "m" "n1" "n2" "name" Note el uso del punto y coma para separar comandos diferentes en la misma l´nea. > name <. no a los datos en el disco).1 <. o a o La funci´ n ls simplemente lista los objetos en memoria: s´ lo se muestran los nombres de los o o mismos. El valor asignado de esta manera puede ser el resultado de una operaci´ n y/o de una funci´ n: o o > n > n [1] > n > n [1] <.10 + 2 12 <.208807 La funci´ n rnorm(1) genera un dato al azar muestrado de una distribuci´ n normal con media o o 0 y varianza 1 (p.3 + rnorm(1) 2. se puede usar la opci´ n o pattern (que se puede abreviar como pat): > ls(pat = "m") [1] "m" "name" Para restringir la lista a aquellos objetos que comienzan con este caracter: 6 .

data.5 n1 : num 10 n2 : num 100 name : chr "Carmen" La opci´ n pattern se puede usar de la misma manera con ls. Por ejemplo: o > ?lm mostrar´ dentro de R.level=-1) M : ‘data. ls. utilizamos la funci´ n rm(): rm(x) elimina el objeto x.frame’: 1 obs. m) > ls.> ls(pat = "ˆm") [1] "m" La funci´ n ls.. Esta ultima funci´ n se debe usar para acceder a la ayuda o con caracteres no-convencionales: > ?* Error: syntax error > help("*") Arithmetic Arithmetic Operators . Por defecto. La ı o o ayuda se encuentra disponible directamente para una funci´ n dada. Podemos evitar mostrar todos estos detalles con la o opci´ n max.str() m : num 0.str() muestra algunos detalles de los objetos en memoria: o > ls. ayuda para la funci´ n lm() (modelo lineal).level la cual especifica el nivel de detalle para la visualizaci´ n de objeo o tos compuestos. n2. max.str(pat="M".5 > ls.frame’: 1 obs. El comando help(lm) o a o ´ help("lm") tiene el mismo efecto. package:base R Documentation 7 . y rm(list=ls()) elimina todos los objetos en memoria. matrices y listas. lo cual puede generar una gran cantidad de informaci´ n. 2. of $ n1: num 10 $ n2: num 100 $ m : num 0. o rm(x.str(pat = "M") M : ‘data. Otra opci´ n util en o o ´ esta funci´ n es max.y) elimina ambos objetos x y y.level = -1: o > M <. La ayuda en l´nea ı ´ La ayuda en l´nea de R proporciona informaci´ n muy util de c´ mo utilizar las funciones.str()..frame(n1.3. incluyendo las columnas de los marcos de datos (“data frames”). las mismas opciones mencionadas para la funci´ n ls() se pueden usar para borrar seleco tivamente algunos objetos: rm(list=ls(pat="ˆm")).str() muestra todos los detalles de los objetos en memoria. of 3 variables: 3 variables: Para borrar objetos en memoria.

que por defecto tiene el valor FALSE (falso). ı Arguments: para una funci´ n. References: (bibliograf´a que puede ser util) o Autı hor(s): (nombre del autor o autores). Tambi´ n se pueden realizar a e b´ squedas por palabra clave con la funci´ n help. o Details: descripci´ n detallada. la funci´ n help s´ lo busca en los paquetes que est´ n cargados en memoria. tal como el nombre del paquete donde o o ı se encuentra la funci´ n u operador. proporciona el nombre de la misma con todos sus argumentos y los o posibles valores por defecto (opciones).search" [4] "link. a Examples: algunos ejemplos que generalmente pueden ser ejecutados sin abrir la ayuda con la funci´ n examples().start() Con esta ayuda en html es posible realizar b´ squedas usando palabras clave. Tambi´ n es util leer cuidadosamente la secci´ n Arguments:.search("bs")’ > help("bs". el tipo de objeto retornado por la funci´ n o el operador. es muy util estudiar la secci´ n Exama o ´ ples:. para un operador describe su uso t´pico. o See Also: otras p´ ginas de ayuda con funciones u operadores similares.Al llamar la ayuda.5.html. permite buscar en o todos los paquetes disponibles si su valor se cambia a TRUE (verdadero): > help("bs") Error in help("bs") : No documentation for ‘bs’ in specified packages and libraries: you could try ‘help. o Usage: para una funci´ n. seguido de secciones con informaci´ n o e ı o espec´fica acerca de la misma.search pero esto est´ a´ n en estado experiu o a u mental (versi´ n 1. ı Description: descripci´ n breve. La secci´ n See u o Also: contiene referencias en hipertexto a otras p´ ginas de ayuda. Despu´ s viene el t´tulo.help" "help. se abre una ventana o p´ gina (esto depende del sistema operativo) con a informaci´ n general sobre la funci´ n en la primera l´nea.start" 8 . o Value: si se aplica. Otras secciones que pueden e o ´ estar presentes son Note: (notas adicionales). La o o a opci´ n try. o ´ Para aquellos que hasta ahora est´ n comenzando en R. o La funci´ n apropos encuentra todas aquellas funciones cuyo nombre contiene la palabra o dada como argumento para los paquetes cargados en memoria: > apropos(help) [1] "help" "help.0 de R).packages=TRUE) topic ‘bs’ is not in any loaded package but can be found in package ‘splines’ in library ‘D:/rw1041/library’ Para ver la ayuda en formato html (por ejemplo a trav´ s de Netscape) escriba el comando: e > help. Por defecto. try. describe en detalle cada uno de sus argumentos.all.packages.all.

5/0 > x [1] Inf > exp(x) [1] Inf > exp(-x) [1] 0 7 El tipo complejo no ser´ muy mencionado en este documento. pero no representan datos como o tal (por ejemplo funciones o expresiones). pero tambi´ n e atributos que especifican el tipo de datos representados por el objeto.TRUE. e e > x <. Manejando Datos con R 3.1e+23 R representa correctamente valores num´ ricos no-finitos como ±∞ con Inf y -Inf. En general. compar <. o o a o hermafrodita). o el c´ digo de una variable u u o categ´ rica (por ejemplo. Para ver el tipo y la longitud de un objeto se pueden usar las funciones mode y length. z <. consideremos una variable que toma los valores 1. mode(z) [1] "character" [1] "logical" [1] "complex" Cuando un dato no est´ disponible se representa como NA (del ingl´ s ’not available’) indea e pendientemente del tipo del dato.1. el n´ mero de huevos en un nido). 2. existen cuatro tipos principales: num´ rico.3. Objetos Hemos visto que R trabaja con objetos los cuales tienen nombre y contenido."Gomphotherium". la acci´ n de una funci´ n sobre un objeto depende de los a e o o ´ atributos de este ultimo. Datos num´ ricos que son muy grandes se pueden expresar en e notaci´ n exponencial: o > N <. hembra. Para entender la utilidad de estos atributos. Todo objeto tiene dos atributos intr´nsecos: tipo y longitud. Existen otros tipos. o y hablando un poco m´ s t´ cnicamente. o 3: tal variable podr´a ı ser un n´ mero entero (por ejemplo.2.1e23 > N [1] 2. respectivamente: > x <. el sexo de los individuos en una poblaci´ n de crust´ ceos: macho. El tipo se refiere a la clase b´ sica ı a de los elementos en el objeto.1 > mode(x) [1] "numeric" > length(x) [1] 1 > A <. mode(compar). y e l´ gico (FALSE [Falso] or TRUE [Verdadero]). o valores e que no son num´ ricos con NaN (del ingl´ s ’not a number’). los atributos del objeto proporcionan la informaci´ n necesaria. Es claro que los resultados de un an´ lisis estad´stico de esta variable no ser´ el mismo en a ı a ambos casos: con R. La longitud es simplemente el n´ mero de elementos en u el objeto. a 9 .1i > mode(A). caracter. complejo7 .

Finalmente. caracter. v´ ase la opci´ n qmethod de esta funci´ n). su tipo y longitud son suficientes para describirlo. o o varios tipos posibles en el mismo objeto? No No No No Si Si Si Un vector es una variable en el significado comunmente asumido. e o o > cit <. una matriz con 2 filas y 2 columnas tiene como dim la pareja de valores [2. caracter."Ella dijo: \"Las comillas se pueden incluir en textos en R. 3. editar sus propiedades. Es posible incluir la comilla misma dentro de la variable si est´ precedida por el s´mbolo \.table para escritura en archivos (p. 2]. Por ejemplo. setwd(“C:/data”) o setwd(“/home/paradis/R”). y cambiar el directorio en el campo “Co´ menzar en:” bajo la lengueta “Alias”: este directorio ser´ entonces el nuevo directorio de trabajo cuando R se ejecuta a usando el alias.\"" > cit [1] "Ella dijo: \"Las comillas se pueden incluir en textos en R.frame’ (marco o base de datos) es una tabla compuesta de uno o m´ s vectores y/o factores de a la misma longitud pero que pueden ser de diferentes tipos. caracter.8 8 En Windows. y una matriz es un caso particular de un o o arreglo donde k = 2.exe. Un arreglo es una tabla de dimensi´ n k. Un ’ts’ es una serie temporal y como tal contiene atributos adicionales tales como frecuencia y fechas.frame ts lista tipos num´ rico. l´ gico e o funci´ n. 13. caracter.\"" > cat(cit) Ella dijo: "Las comillas se pueden incluir en textos en R. objeto vector factor arreglo matriz data. 10 . complejo o l´ gico e o num´ rico. caracter. o Es necesario proporcionar la direcci´ n (’path’) completa del archivo si este no se encuentra en el o directorio de trabajo. . . se utiliza la fucni´ n setwd(). por ejemplo. complejo o l´ gico e o num´ rico. Para otros objetos es necesario usar informaci´ n adicional que es proporcionada por atributos no-intr´nsecos. o o write. Un ’data. Note que los elementos en un arreglo o una matriz son del mismo tipo. una lista puede contener cualquier tipo de objeto incluyendo otras listas! Para un vector. Leyendo datos desde un archivo R utiliza el directorio de trabajo para leer y escribir archivos.> x . que corresponde a las dimensiones del objeto. pero su longitud es 4. complejo o l´ gico e o num´ rico o caracter e num´ rico. caracter. es util crear un alias de Rgui. Dentro de o ı estos atributos se encuentran por ejemplo dim. complejo. . Los dos a ı caracteres juntos \" pueden ser usados por funciones como cat para visualizaci´ n en pantalla. expresi´ n. Para saber cual es este directorio puede utilizar el comando getwd() (get working directory) Para cambiar el directorio de trabajo. Un factor es una variable categ´ rica. complejo o l´ gico e o num´ rico.2.x [1] NaN Variables que necesitan ser representadas como caracteres se delimitan con comillas ". complejo o l´ gico e o num´ rico." La siguiente tabla resume los tipos de objetos y los datos que representan.

check. V3.names fill strip. fill = !blank. tambi´ n escribiendo misdatos[.".read. skip = 0.char = "#") file header sep quote dec row. . ver abajo). .. R si son omitidos por el usuario) que se detallan en la siguiente tabla: read.names.names as.strings colClasses nrows skip check.table (con sus variantes.names = TRUE.names. misdatos$V2. . l´neas que comienzen ı con este caracter son ignoradas en la lectura (para desactivar este argumento utilize comment. .skip = TRUE. posiblemente con su direcci´ n si se encuentra en un directorio diferente al de trabajo (el s´mbolo \no es o ı permitido y debe reemplazarse con /. y acceder a bases de datos tipo SQL. La funci´ n read. . por ejemplo sep="\t" si es una tabulaci´ n o los caracteres usados para citar las variables en modo caracter el caracter usado para representar el punto decimal un vector con los nombres de las l´neas de tipo caracter o num´ rico (por defecto: 1. comment. 2. e 9 Existen varias opciones con valores por defecto (aquellos usados por 1]. ) controla la conversi´ n de variables tipo caracter a factores (si es FALSE) o las mantiene o como caracteres (TRUE).is na.table(file.fwf. ignora l´neas en “blanco” ı un caracter que define comentarios en el archivo de datos. scan y read. SPSS.R puede leer datos guardados como archivos de texto (ASCII) con las siguientes funciones: read. R tambi´ n puede leer archivos e en otros formatos (Excel. nrows = -1.white = FALSE. pero las funciones ´ necesarias no est´ n incluidas en el paquete base. header = FALSE. 1] son vectores mientras que misdatos["V1"] es un marco de datos.table("data. . Aunque esta funcionalidad es muy util para el a usuario avanzado. row.lines. chequea que el nombre de las variables sea v´ lido para R a si es TRUE y todas las filas no tienen el mismo n´ mero de variables. . as. as. o. Por ejemplo si tenemos un archivo de nombre data. .dat") crear´ un marco de datos denominado misdatos. o una direcci´ n remota al o archivo tipo URL (http://.) una variable l´ gica (FALSE (falso) o TRUE (verdadero)) indicando si el archivo contieo ne el nombre de las variables en la primera fila o l´nea ı el separador de campo usado en el archivo.skip comment. . Mas adelante veremos algunos detalles acerca de la manipulaci´ n de objetos (p. strip. el comando: > misdatos <. na. misdatos["V2"].table crea un marco de datos (’data frame’) y constituye la manera m´ s o a usual de leer datos en forma tabular. .. . y puede ser accedida individualmente escribiendo misdatos$V1.strings = "NA". 17) o 11 . .is = FALSE. o escribiendo misdatos["V1"]. . V2.is puede ser un vector l´ gico o num´ rico que especifique o e las variables que se deben mantener como caracteres el valor con el que se codifican datos ausentes (convertido a NA) un vector de caracteres que proporciona clases para las columnas el n´ mero m´ ximo de l´neas a leer (se ignoran valores negativos) u a ı el n´ mero de l´neas ignoradas antes de leer los datos u ı si es TRUE. ı e 3.char el nombre del archivo (entre “” o como una variable de tipo caracter). . .lines.char =“”) 9 Existe una diferencia: misdatos$V1 y misdatos[. . y cada variable recibir´ por defecto el nombre a a V1. ) un vector con los nombres de las variables (por defecto: V1. sep = "". dec = ". .lines.2 ]. ). V2.white blank.dat. . . col. . . borra espacios extra antes y despues de variables tipo caracter si es TRUE. blank. agrega “blancos” u (condicional a sep) si es TRUE.names col. inclusive en Windows). . nos restringiremos a describir las funciones para leer archivos en formato ASCII ´ unicamente. . quote = "\"’".skip. misdatos[. colClasses = NA. SAS.

csv(file. what = list("".. es decir si se omite el argumento what..char = "#") 12 . na..". quote="\"". .dat.".) ´ La funci´ n scan es m´ s flexible que read. strip.lines. quote="\"". fill = TRUE. se genera un mensaje de error. header = TRUE.". sep = "\t".scan("data. quote="\"".".. multi. listas. quote = if (sep=="\n") "" else "’\"". sep = "\t".. En el ejemplo anterior. . 0. dec=". Otra distinci´ n importante es la capacidad de scan() de crear e o diferentes objetos como vectores. fill = TRUE. A diferencia de esta ultima es posible o a especificar el modo de las variables: > misdatos <.´ Las variantes de read. sep = ". misdatos es una lista de tres vectores. .table son utiles ya que vienen con diferentes opciones por defecto: read. n = -1. flush = FALSE.) read.".delim2(file.dat". header = TRUE. matrices. sep = "". header = TRUE.".strings = "NA". marcos de datos. Por defecto. dec=".csv2(file. nmax = -1.white = FALSE. sep = ". fill = FALSE. comment. scan() crea un vector num´ rico.) read. quote="\"". fill = TRUE. nlines = 0. 0)) En este ejemplo scan lee tres variables del archivo data. dec=".table. quiet = FALSE. .. fill = TRUE. . Si los datos leidos no corresponden al modo (o modos) esperado e (s) (ya sea por defecto o especificado a trav´ s de what).. .". dec=". what = double(0).skip = TRUE.. header = TRUE. dec = ".delim(file. .line = TRUE. skip = 0.) read. Las e opciones son las siguientes: scan(file = "". el primero es un caracter y los siguientes dos son num´ ricos. blank.

names.60 1. quote = TRUE.names = TRUE.50 1. scan lee los datos hasta que encuentra el final del archivo) el n´ mero de datos por leer (por defecto no hay limite) u el separador de campos usado en el archivo los caracteres usados para citar las variables de tipo caracter el caracter usado para el punto decimal el n´ mero de l´neas ignorado antes de empezar a leer datos u ı el n´ mero de l´neas a leer u ı el valor asignado a datos ausentes (convertido a NA) si es TRUE.table() con excepci´ n o de widths que especifica la anchura de los campos.char el nombre del archivo(entre “”). col. Los argumentos y opciones son: write. posiblemente incluyendo la direcci´ n completa (el o s´mbolo \no es permitido y debe ser reemplazado por /. n = -1) Las opciones son las mismas que para read. El objeto es o t´picamente un marco de datos (’data. si file=“”.6 6 C 1. as. o si what es una lista.line comment.file what nmax n sep quote dec skip nlines na.3 B1.fwf puede usarse para leer datos en archivos en formato fijo ancho: o read.55 1.). qmethod = c("escape".3.75 1. widths. row.skip multi.2 2 A 1.. . file = "". ignora l´neas en blanco ı si what es una lista.501. Guardando datos La funci´ n write. 4. sep="\t".4 4 B 1.6 C1. los datos deben ser introducidos desde el teclado (la entrada se termina con una l´nea en blanco) ı especifica el tipo (s) de los datos (num´ rico por defecto) e el n´ mero m´ ximo de datos a ser leido. scan muestra una l´nea indicando los campos que han sido leidos ı si es TRUE.2 A1. 3)) > misdatos V1 V2 V3 1 A 1. ı matriz. skip = 0.lines. esto se puede leer con el comando: A1.txt tiene los datos mostrados a la derecha. dec = ".3 3 B 1.551.5 C1. sep = " ". na = "NA". especifica si las variables de un mismo individuo est´ n en una sola a l´nea en el archivo (FALSE) ı un caracter que define comentarios en el archivo.frame’).7 > misdatos <.names = TRUE.names. eol = "\n". col.table(x. append = FALSE.65 1.601.fwf("datos.. scan va a la siguiente l´nea una vez se han leido todas las columnas (el ı usuario puede agregar comentarios en el archivo de datos) agrega “blancos” si es TRUE y todas las l´neas no tienen el mismo n´ mero de variables ı u (condicional a sep) si es TRUE.fwf(file.txt". elimina espacios extras antes y despues de variables de tipo caracter si es FALSE.651. inclusive bajo Windows). row. si un archivo de nombre datos. pero puede ser cualquier otro tipo de objeto (vector.70 1.5 5 C 1.white quiet blank. widths=c(1.751.read.701.7 3.". .. aquellas l´neas que comiencen con ı este caracter son ignoradas La funci´ n read. o ı acceso remoto del tipoURL (http://. el n´ mero de l´neas por u a u ı leer (por defecto.table guarda el contenido de un objeto en un archivo.is = FALSE. "double")) 13 .4 B1. ). Por ejemplo.string flush fill strip.

5) [1] 1. 3.RData"). file= "xyz. 3.RData).RData").txt"). La funci´ n save.5 4. y.5 3. 5. este indica el n´ mero de las variables a ser es mostradas entre (en e u ambos casos los nombres de las variables se escriben entre pero no si quote = FALSE) el separador de campo utilizado en el archivo el caracter que indica el final de l´nea ("\n" es ’retorno’) ı el caracter a usarse para datos faltantes el caracter usado para el punto decimal una opci´ n l´ gica que indica si los nombres de las l´neas se escriben en el archivo o o ı identificaci´ n para los nombres de las columnas o si es quote=TRUE.5 5. se puede generar con: u > x <.names col. donde x es el nombre del objeto (que puede ser un vector. 0. nc=5 para otros u tipos).0 3.1. si o e es un vector num´ rico.RData") (guarda todos los objetos en memoria en el archivo . Los datos (denominados ahora como un workspao ce o “espacio de trabajo” en terminolog´a de R) se pueden cargar en memoria m´ s tarde con el ı a comando load("xyz. por defecto) cada ”es reemplazada por \. el segundo el final y el tercero el u incremento que se debe usar para generar la secuencia. file=". por ejemplo de 1 hasta 30. especifica la manera como se debe tratar las comillas dobles ”en variables tipo caracter: si es ”escape”(o ”e”. si es ”dcada ”es reemplazada por ¸ Una manera sencilla de escribir los contenidos de un objeto en un archivo es utilizando el comando write(x.1:30 El vector resultante x tiene 30 elementos.4.image() es una manera corta del comano do save(list=ls(all=TRUE). una matrix. ´ Generacion de datos Secuencias regulares Una secuencia regular de n´ meros enteros. por defecto). z. Para facilitar la transferencia de datos entre diferentes m´ quinas a se pueden utilizar la opci´ n ascii = TRUE .4.0 donde el primer n´ mero indica el principio de la secuencia. El operador ‘:’ tiene prioridad sobre otros operadores aritm´ ticos en una expresi´ n: e o > 1:10-1 [1] 0 1 2 3 4 5 6 7 8 9 > 1:(10-1) [1] 1 2 3 4 5 6 7 8 9 La funci´ n seq puede generar secuencias de n´ meros reales: o u > seq(1. Para guardar un grupo de objetos de cualquier tipo se puede usar el comando save(x.x file append quote sep eol na dec row. el objeto se muestra en la pantalla) si es TRUE anexa los datos al archivo sin borrar datos ya existentes en el mismo l´ gico o num´ rico : si es TRUE variables de tipo caracter y factores se escriben entre . y append (l´ gico) que agrega los datos al archivo sin borrar datos ya existentes (TRUE) o o borra cualquier dato que existe en el archivo (FALSE. Esta funci´ n tiene dos opciones: nc (o ncol) que define el o n´ mero de columnas en el archivo (por defecto nc=1 si x es de tipo caracter. Tambi´ n se puede usar: e 14 .0 4.names qmethod el nombre del objeto a exportar el nombre del archivo (por defecto.0 1.5 2.0 2. file="data. o un arreglo).

y labels para especificar los nombres de los factores.5. 4. 1. 3.0 2.5 4.0 4. 5. to=5) [1] 1.5.0 10: Read 9 items > z [1] 1.5 4.5 2. Ejemplos: > gl(3.0 1.5 4. 4.0 2.5 5.5 5.5 3.0 4.5 4.5 2. length=20) [1] 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 Levels: 1 2 > gl(2. 3. Se pueden usar dos opciones: length para especificar el n´ mero de e u datos producidos. 2. 1.5.5 3.0 1.0 3.0 1.0 2.0 4. y n es el n´ mero o u u de r´ plicas en cada nivel. 10) [1] 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 Levels: 1 2 > gl(2. length=30) [1] 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 Levels: 1 2 3 > gl(2.5 3.0 3. 6. n) donde k es el n´ mero de niveles (o clases). "Hembra")) [1] Macho Macho Macho Macho Macho Macho [7] Hembra Hembra Hembra Hembra Hembra Hembra Levels: Macho Hembra > gl(2.0 La funci´ n rep crea un vector con elementos id´ nticos: o e > rep(1.5. 5) [1] 1. tambi´ n es posible introducir datos directamente desde el teclado usando la fune ci´ n scan sin opciones: o > z <. length=20) [1] 1 1 2 2 1 1 2 2 1 1 2 2 1 1 2 2 1 1 2 2 Levels: 1 2 15 .> seq(length=9.5 3. 5) [1] 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 Levels: 1 2 3 > gl(3.0 2. o La funci´ n tiene la forma gl(k.0 Tambi´ n se pueden escribir los valores directamente usando la funci´ n c: e o > c(1.0 3.5 2.5 5. label=c("Macho".5 5.5)) [1] 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 ´ La funci´ n gl (generador de niveles) es muy util porque genera series regulares de factores. 2. 30) [1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 La funci´ n sequence crea una serie de secuencias de n´ meros enteros donde cada secuencia o u termina en el n´ mero (o n´ meros) especificado (s) como argumento (s): u u > sequence(4:5) [1] 1 2 3 4 1 2 3 4 5 > sequence(c(10.0 Si se quiere.0 4. from=1. 2.scan() 1: 1.0 1.5 2.0 3.

grid() crea un marco de datos con todas las combinaciones de vectores o factores proporcionados como argumentos: > expand. scale=1) rlnorm(n. rate=1) rgamma(n.80). y p1. shape1. p2.. n. df2) rchisq(n.4. n) 3. df) rbinom(n. 300).). min=0. scale=1) rcauchy(n. n). shape. expand.. size. df1. prob) rhyper(nn. scale=1) rpois(n.Finalmente. sexo=c("Macho". meanlog=0. k) rlogis(n.. La tabla anterior a o muestra los detalles de cada distribuci´ n. mean=0. la densidad de probabilidad acumulada (pfunc(x. prob) runif(n. . donde func indica la disribuci´ n. n es el n´ mero de datos geo u nerado. sd=1) rexp(n. . sdlog=1) rnbinom(n. p2. "Hembra")) a p sexo 1 60 100 Male 2 80 100 Male 3 60 300 Male 4 80 300 Male 5 60 100 Female 6 80 100 Female 7 60 300 Female 8 80 300 Female Distribuci´ n/funci´ n o o Gausse (normal) exponencial gamma Poisson Weibull Cauchy beta ‘Student’ (t) Fisher–Snedecor (F) Pearson (χ2 ) binomial geom´ trica e hypergeom´ trica e log´stica ı lognormal binomial negativa uniforme Estad´stico de Wilcoxon’s ı funci´ n o rnorm(n. p o q para obtener. rsignrank(nn. m. shape2) rt(n. . df) rf(n. a Todas estas funciones se pueden usar reemplazando la letra r con las letras d. . la densidad de probabilidad (dfunc(x.. significa que el par´ metro debe ser especificado por el usuario). m. prob) rgeom(n.. . Estas funciones son de la forma u rfunc(n. shape.))..grid(a=c(60. max=1) rwilcox(nn. scale=1) rbeta(n. location=0. Secuencias aleatorias ´ La posibilidad de generar datos aleatorios es bastante util en estad´tica y R tiene la capacidad s de hacer esto para un gran n´ mero de funciones y distribuciones.. . son valores que toman los par´ metros de la distribuci´ n.)). . size.2. y el valor del cuartil (qfunc(p. con 0 < p < 1) respectivamente. p1. y los posibles valores por defecto de los par´ metros (si o a no se indica. p=c(100. location=0. lambda) rweibull(n.). 16 ..

logical(). etc. e Por ejemplo. pero o tambi´ n los diferentes niveles posibles de esta variable (inclusive si est´ n presentes en los e a datos). exclude especifica los valores x que se deben excluir de los niveles. a Tambi´ n puede ser bastante conveniente crear nuevos objetos a partir de objetos ya existentes. esto puede ı ser m´ s eficiente que colocar todos los elementos juntos usando c(). o En esta etapa de nuestro aprendizaje de R. Un factor incluye no solo los valores correspondientes a una variable categ´ rica. La funci´ n vector. y ordered es un argumento l´ gico que especifica si los niveles del o factor est´ n ordenados. Recuerde que x es de tipo num´ rico o caracter. generar un objeto especificando su clase.1. longitud. "C")) [1] A B C Levels: A B C > factor(1:5. y a o despues extraer sucesivamente los elementos para insertarlos en una funci´ n lm. El sistema de indexado se a puede usar en estas circunstancias. La funci´ n factor crea un factor con las siguientes opciones: o factor(x.5. labels define los nombres de los niveles. levels=1:5) [1] 1 2 3 Levels: 1 2 3 4 5 > factor(1:3. labels=c("A". Factor. labels = levels. exclude = NA. Por ejemo o plo. FALSE o “ ” respectivamente). levels = sort(unique(x).ordered(x)) ´ levels especifica los posibles niveles del factor (por defecto los valores unicos de x).last = TRUE). si se quiere ajustar una serie de modelos.´ 3. sin embargo. Ejemplos: a e > factor(1:3) [1] 1 2 3 Levels: 1 2 3 > factor(1:3. exclude=4) [1] 1 2 3 NA 5 Levels: 1 2 3 5 La funci´ n levels extrae los niveles posibles de un factor: o 17 . el tipo y clase de los objetos as´ creados se determina generalmente de manera o ı impl´cita. como veremos m´ s adelante (p. y character().5. y nos permite ahondar en algunas nociones mencionadas previamente. ordered = is. Es posible. Las siguientes funciones tienen exactamente el mismo efecto y tienen un solo argumento (la longitud del vector): numeric(). Manipulacion de objetos 3. que tiene dos argumentos mode y length. na. la utilidad de aprender las siguientes funciones no es solo pr´ ctica sino did´ ctica. es f´ cil colocar las f´ rmulas en una lista. 23). crea un vector cuyos o elementos pueden ser de tipo num´ rico. "B". La construcci´ n expl´cita de un objeto nos proporciona un a a o ı mejor entendimiento de su estructura. se puede crear un objeto ‘vac´o’ y modificar de manera sucesiva sus elementos. ı Esta aproximaci´ n es interesante desde el punto de vista de la manipulaci´ n de objetos. Creaci´ n de objetos o En las secciones anteriores vimos diferentes maneras de crear objetos usando el operador de asignaci´ n. tipo. l´ gico o caracter dependiendo del argumento espee o cificado en mode (0. Vector.

que define el n´ mero de filas y columnas de la matriz.1:15 > x [1] 1 2 3 4 5 > dim(x) NULL > dim(x) <.] 3 8 13 [4. > matrix(data=5. Una e u matriz se puede crear con la funci´ n matrix: o matrix(data = NA.2] [1.] 1 6 11 [2. Una matriz es realmente un vector con un atributo adicional (dim) el cual a su vez es un vector num´ rico de longitud 2.1] [.] 5 5 > matrix(1:6. 3) [.] 5 5 [2.2] [. 2. nrow = 1.] 1 2 3 [2.2] [. nr=2.] 2 7 12 [3.] 4 9 14 [5.3] [1. byrow=TRUE) [. 3) > x [.c(5.factor(c(2. 4). La opci´ n dimnames permite asignar nombres a las o filas y columnas.3] [1.1] [.1] [.] 5 10 15 6 7 8 9 10 11 12 13 14 15 18 . levels=2:5) > ff [1] 2 4 Levels: 2 3 4 5 > levels(ff) [1] "2" "3" "4" "5" Matriz.1] [.3] [1. byrow = FALSE. dimnames = NULL) La opci´ n byrow indica si los valores en data deben llenar las columnas sucesivamente o (por defecto) o las filas (if TRUE).] 4 5 6 Otra manera de crear una matriz es dando los valores apropiados al atributo dim (que inicialmente tiene valor NULL): > x <. 3. nc=2) [.2] [.] 1 3 5 [2.] 2 4 6 > matrix(1:6.> ff <. 2. ncol = 1.

y <. Hemos visto que un marco de datos (’data. Es posible cambiar el nombre de las columnas con data. M) x M 1 1 10 2 2 35 3 3 10 4 4 35 > data.frame(x.Marco de datos. A2=n). Una lista se crea de manera similar a un marco de datos con la funci´ n list.frame(x. tomando los vectores x y y del ejemplo anterior: > L1 <. L2 <. 3 Si se incluye un factor en un marco de datos.table.list(x.2:4 > data.1:4. un vector de modo caracter con longitud igual al n´ mero de l´neas en el u ı marco de datos.10. Tambi´ n se pueden dar nombres a las filas con la opci´ n row. M <. n <. A diferencia de data. Finalmente.names que debe e o ser.list(A=x. por supuesto. y).frame(x. tambi´ n es posible hacerlo con la funci´ n data. el factor debe ser de la misma longitud que el vector (o vectores).frame.c(10. B=y) > L1 [[1]] [1] 1 2 3 4 [[2]] [1] 2 3 4 > L2 $A [1] 1 2 3 4 $B [1] 2 3 4 > names(L1) 19 .frame(A1=x. note que los marcos de datos tienen un atributo similar al dim de las matrices. y) Error in data. n) x n 1 1 10 2 2 10 3 3 10 4 4 10 > data.frame’) se crea de manera impl´cita ı con la funci´ n read. o los nombres de los objetos no se toman por defecto. o si uno de ellos es m´ s corto que los otros. o e o Los vectores incluidos como argumentos deben ser de la misma longitud.frame(x. 35). es “reciclado” un cierto n´ mero de veces: a u > x <.frame(). Lista. y) : arguments imply differing number of rows: 4. No existe nino guna limitaci´ n en el tipo de objetos que se pueden incluir.

12. 5). start = c(1959.eps class names Algunos ejemplos de series de tiempo creadas con ts(): > ts(1:10. frequency = 4. y c("mts". por defecto es "ts" para una serie univariada. Las opciones que caracterizan un objeto de este tipo son: ts(data = NA. "ts") para una serie multivariada para una serie multivariada. names) data start end frequency deltat un vector o una matriz el tiempo de la primera observaci´ n ya sea un n´ mero o un vector con o u dos enteros (ver ejemplo m´ s abajo) a ´ el tiempo de la ultima observaci´ n especificado de la misma manera que o start el n´ mero de observaciones por unidad de tiempo u la fracci´ n del periodo de muestreo entre observaciones sucesivas o (ej. 3). start = c(1959. unicamente se debe especificar o frequency o deltat tolerancia para la comparaci´ n de series. Las frecuencias se consideran o iguales si su diferencia es menor que ts. frequency = 12. 2)) Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec 1959 1 2 3 4 5 6 7 8 9 10 11 1960 12 13 14 15 16 17 18 19 20 21 22 23 1961 24 25 26 27 28 29 30 31 32 33 34 35 1962 36 37 38 39 40 41 42 43 44 45 46 47 > ts(1:10.eps").eps clase que se debe asignar al objeto. start = 1959) Time Series: Start = 1959 End = 1968 Frequency = 1 [1] 1 2 3 4 5 6 7 8 9 10 > ts(1:47. un vector de tipo caracter con los nombres de las series individuales. start=c(1961. . 1/12 para datos mensuales). start = 1. o Serie 1. La funci´ n ts crea un objeto de clase "ts" (serie de tiempo) a partir de un o ´ vector (serie de tiempo unica) o una matriz (serie multivariada). frequency=12) Series 1 Series 2 Series 3 Jan 1961 8 5 4 20 . 1).eps = getOption("ts. ts. Serie 2. por defecto los nombres de las columnas de data. frequency = 1. deltat = 1.NULL > names(L2) [1] "A" "B" Series de tiempo. class. . ts. . end = numeric(0). 2)) Qtr1 Qtr2 Qtr3 Qtr4 1959 1 2 3 1960 4 5 6 7 1961 8 9 10 > ts(matrix(rpois(36.

z <. por ejemplo D() que calcula derivadas parciales: > D(exp1. las conversiones siguen reglas muy intuitivas.5.2. n por lo tanto debe ser relativamente f´ cil convertir el tipo de un objeto cambiando algunos de sus a atributos. Conversi´ n de objetos o Para el lector debe ser obvio que las diferencias entre algunos tipos de objetos son peque˜ as. para incluir ecuaciones en gr´ ficos (p. En muchos casos. 34).1 > exp1 <. Una expresi´ n es o o o una serie de caracteres que hace sentido para R. "y") -x/(y + exp(z))ˆ2 > D(exp1. Los objetos de clase expresi´ n juegan un papel fundamental en R.expression(x / (y + exp(z))) > exp1 expression(x/(y + exp(z))) > eval(exp1) [1] 0. Algunas funciones utilizan o expresiones como argumentos.1) tiene o o o en su paquete base.5. La siguiente tabla resume la situaci´ n o para la conversi´ n de diferentes tipos. es util construir una expresi´ n sin evaluarla: esa o to es lo que la funci´ n expression hace. este es evaluado por R y ´ ejecutado si es v´ lido. > x <. Todos los comandos v´ lidos son expresioa nes. "z") -x * exp(z)/(y + exp(z))ˆ2 3. 77 funciones de este tipo.3. es posible evaluar la expresi´ n o o posteriormente con eval(). Tal conversi´ n se puede realizar usando una funci´ n as. entre otras cosas.5. R (versi´ n 1.5749019 Las expresiones se pueden usar. Por supuesto.Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec 1961 1961 1961 1961 1961 1961 1961 1961 1961 1961 1961 6 2 8 4 4 4 11 6 6 5 8 6 3 5 9 6 2 6 5 5 5 5 9 3 4 3 13 6 4 7 7 7 2 Expresi´ n. Cuando se escribe un comando directamente en el teclado. o Generalmente. a Una expresi´ n se puede crear desde una variable de tipo caracter.2. y <. asi que no ahondaremos mucho m´ s en este tema. a El resultado de esta conversi´ n depende obviamente de los atributos del objeto convertido.algo. o 21 . "x") 1/(y + exp(z)) > D(exp1.

numeric Reglas FALSE → 0 TRUE → 1 "1".5. ”A”. "2". .logical caracter as. .character Existen funciones que convierten entre diferentes clases de objetos (as.3. ).table() leer´ la e o a columna como un factor por defecto. R realiza la o o e conversi´ n usando la codificaci´ n num´ rica de los niveles del factor (no los valores literales del o o e factor): > fac <. :. as. "2". "T" → TRUE otros caracteres → NA 1. 2. → NA 0 → FALSE otros n´ meros → TRUE u "FALSE". . . .ts. . 10 Los siguientes caracteres tambi´ n son operadores en R: $. .Conversi´ n a o num´ rico e Funci´ n o as.data. → 1. Estas funciones pueden afectar atributos diferentes al tipo durante la conversi´ n. as. <-. Operadores Previamente mencionamos que existen tres tipos de operadores en R10 . . [.expression. En este caso. . . . e > as.numeric(as. . primero se debe cono vertir a caracter y despues a num´ rico. . . "F" → FALSE "TRUE". FALSE → "FALSE" TRUE → "TRUE" l´ gico o as.matrix. [[.frame.numeric(fac) [1] 1 2 Para realizar la conversi´ n manteniendo los valores literales del factor. . 3.character(fac)) [1] 1 10 ´ Este procedimiento puede ser bastante util si en un archivo una variable num´ rica tambi´ n e e tiene valores no-num´ ricos. ?. Vimos anteriormente que en esta situaci´ n read. 2. . Esta es la lista. e 22 .factor(c(1. → "1". los resultados de la conversi´ n son generalmente intuitivos. 10)) > fac [1] 1 10 Levels: 1 10 > as. . . De nuevo. Una o o situaci´ n frecuente es la conversi´ n de factores a valores num´ ricos. as.

devolviendo un objeto del a n mismo tama˜ o. j]. Si x es una matriz o un marco de datos el valor de la i´ sima fila y la j´ sima columna se accede con x[i. . x[. . El sistema de indexaci´ n se puede generalizar f´ cilo a mente para matrices con m´ s de dos dimensiones (por ejemplo una matriz tridimensional: x[i. y) NO l´ gico o Y l´ gico o id.2 El no especificar la fila incluye a todas. Los operadores comparativos o e pueden actuar sobre cualquier tipo devolviendo uno o varios valores l´ gicos. y pueden o o devolver uno (o varios) valores l´ gicos. La expresi´ n 0 <x <1 es v´ lida.1:3. . Los operadores comparativos act´ an sobre cada elemento de los dos objetos que se est´ n comu a parando (reciclando los valores de los m´ s peque˜ os si es necesario). simplemente se escribe x[3]. y <. para acceder al tercer elemento de e o un vector x. k]. a j. Para comparar “totalmente” dos objetos es necesario usar la funci´ n identical: n o > x <. O l´ gico o id.10. Los e u operadores aritm´ ticos act´ an sobre variables de tipo num´ rico o complejo. mientras que los par´ ntesis se usan para especificar los argumentos de una funci´ n: e o 23 . Para cambiar todos los valores de la e e tercera columna. y) [1] TRUE 3. Por ejemplo. a <b). C´ mo acceder los valores de un objeto: el sistema de indexaci´ n o o El sistema de indexaci´ n es una manera eficiente y flexible de acceder selectivamente elemeno tos de un objeto. e u e e o en este caso los valores l´ gicos son forzados a valores num´ ricos. pero tambi´ n l´ gico. ). Es importante recordar que la indexaci´ n se realiza con corchetes reco tangulares. 3].5. O exclusivo Los operadores aritm´ ticos y comparativos act´ an en dos elementos (x + y. Los operadores “Y” y “O” existen en dos formas: uno o sencillo donde cada operador act´ a sobre cada elemento del objeto y devuelve un n´ mero de u u valores l´ gicos igual al n´ mero de comparaciones realizadas. el valor l´ gico es imp´citamente forzado a num´ rico (1 o ı e o 0 <1). u Es necesario usar el operator “AND” para especificar una desigualdad del tipo 0 < x < 1 la cual puede ser codificada como 0 <x & x <1. pero no devuelve el o a resultado esperado debido a que ambos operadores son del mismo tipo y se ejecutan sucesivamente de izquierda a derecha. y puede ser num´ rico o l´ gico. > x[.Aritm´ ticos e + * / ˆ %% %/ % adici´ n o substracci´ n o multiplicaci´ n o divisi´ n o potencia m´ dulo o divisi´ n de enteros o < > <= >= == != Operadores Comparativos menor que mayor que menor o igual que mayor o igual que igual diferente de L´ gicos o ! x x & y x && y x | y x || y xor(x.1:3 > x == y [1] TRUE TRUE TRUE > identical(x.4. otro doble donde cada operador o u act´ a solamente sobre el primer elemento del objeto. La comparaci´ n 0 <x se realiza primero y el valor retornado es comparado o con 1 (TRUE o FALSE <1): en este caso. . o Los operadores l´ gicos pueden actuar sobre uno (!) o dos objetos de tipo l´ gico. 3] <.

matrices. y asi sucesivamente. 15). Por ejemplo. 24 .1:40 > s <. sus valores pueden ser modificados con my. la posibilidad de seleccionar los n´ mea o o u ros pares de un vector de enteros: > x <. Si este tercer objeto es un vector.> x(1) Error: couldn’t find function "x" La indexaci´ n se puede usar para suprimir una o mas filas o columnas. es posible acceder los valores de un elemento usando como ´ndice una expresi´ n comparativa: ı o > x <. el tercero no (FALSE). y x[-c(1. ] har´ lo mismo con la primera y la quinceava a filas. si es una matriz en tres dimensiones con my. Para vectores. Para listas.rpois(40.20 3 4 20 20 20 20 20 20 <. etc.list[[3]] accede al tercer elemento de my. o ] suprime la primera fila. etc. Estos valores se pueden calcular con anterioridad y pueden ser reciclados si es necesario: > x <. k]. es f´ cil acceder a diferentes elementos (que pueden ser de cualquier tipo) usana do corchetes rectangulares dobles. o La indexaci´ n l´ gica se puede usar con marcos de datos. el sistema de indexaci´ n utiliza los valores l´ gicos devueltos por los operadores o o comparativos. Esta es una manera muy compacta y poderosa de hacer indexaci´ n selectiva sin utilizar bucles. con la dificultad adicional que las o o diferentes columnas del marco pueden ser de diferentes tipos. por ejemplo my. El resultado puede ser indexado a su vez como se explic´ anteriormente para veco tores.list[[3]][i. j. el segundo si (TRUE).1:10 > x[x >= 5] > x [1] 1 2 > x[x == 1] > x [1] 25 2 <. TRUE) > x[s] [1] 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 En este caso al aplicar la condici´ n en s al vector x el primer elemento no se selecciona o (FALSE). lambda=5) > x [1] 5 9 4 7 7 6 4 5 11 3 [21] 4 6 6 5 4 5 3 4 3 3 > x[x %% 2 == 0] [1] 4 6 4 2 2 2 4 6 6 4 4 8 4 2 4 5 3 7 7 1 7 5 3 3 8 9 1 2 4 2 2 5 1 2 4 Por lo tanto.c(FALSE. matrices y otros arreglos.list.list[[3]][i]. x[-1.25 3 4 20 20 20 20 20 20 Un uso pr´ ctico de la indexaci´ n l´ gica es por ejemplo.

Los nombres son atributos.0 3. y. colnames.entry modifica directamente el objeto dado como argumento sin neceo sidad de asignar su resultado. o Por ejemplo. en este caso el vector m´ s corto se a recicla. el comando DF["x"] extraer´ un marco de datos que solamente contendr´ x.x + y 25 . dimnames). particularmente lo que concierne a su utilizaci´ n o para acceder a elementos de un objeto. la funci´ n de devuelve una lista con los objetos o dados como argumentos y posiblemente modificados. a ı Al realizar la extracci´ n de esta manera los atributos del objeto original se mantienen intactos. Hemos visto la m´ s sencila.1:4 > y <. 11. Esto funciona con listas si los elementos en la misma tienen nombres. 0.entry(X) abrir´ un editor gr´ fico que le a a permitir´ cambiar los valores en la matriz o adcionar nuevas columnas y/o filas. Por ejemplo: e > c(1:5.0 10. 3. Funciones aritm´ ticas simples e Existen muchas funciones en R para manipular datos.7. Por el contrario.4 10. Los detalles del uso del editor de datos dependen del sistema operativo (no est´ a´ n implea u mentado en todas las plataformas). pero como en muchas otras funciones.5. Nos limitaremos por ahora a algunas nociones muy simples sobre los nombres. Ejemplos: > x <.5.5.0 2. c que a concatena los objetos listados entre par´ ntesis.0 5. e a 3. El editor de datos Es posible utilziar un editor gr´ fico similar a una hoja de c´ lculo para editar un objeto num´ ria a e co. Como el lector se habr´ dado cuenta. a La funci´ n data.0 Los vectores pueden ser manipulados con expresiones aritm´ ticas cl´ sicas: e a > x > y > z > z [1] <. DF[c(‘‘x’’.0 4.rep(1. el ´ndice utilizado aqui es un vector de modo caracter. a ı Al igual que los vectores num´ ricos o l´ gicos descritos previamente.2)) [1] 1.0 10.5. Por ejemplo. si X es una matriz. Este procedimiento tambi´ n es v´ lido para listas. y z.1:2 > z <. y u existen diferentes tipos (names.8 11.x + y 2 3 4 5 Se pueden adicionar vectores con diferentes longitudes. Si los elementos de un objeto tienen nombres.g. si un marco de datos DF contiene las variables x.3. seq(10. rownames.6 10. 4) <. puede ser asignado a otro objeto.1:4 <. ı DF$x)..6. el comando data. Accediendo a los valores de un objeto con nombres Hemos visto en m´ ltiples ocasiones el concepto de nombres. e o Para extraer un vector o un factor de un marco de datos se puede usar el s´mbolo $ (e. Este resultado es mostrado en pantalla por defecto.2 10. se pueden extraer us´ ndolos como ´ndices. este vector se puede definir e o previamente y ser utilziado despu´ s para la extracci´ n. ‘‘y’’)] extraer´ un a a a marco de datos con ambas variables.

1:4 <. o la matriz de correlaci´ n si x y y son matrices o o o marcos de datos Estas funciones devuelven un solo valor (o un vector de longitud 1). y) suma de los elementos de x producto de los elementos de x valor m´ ximo en el objeto x a valor m´nimo en el objeto x ı devuelve el ´ndice del elemento m´ ximo de x ı a devuelve el ´ndice del elemento m´nimo de x ı ı rango de x o c(min(x).> z [1] 2 4 4 6 > x <. a sin. y) o cov(x. max(x)) n´ mero de elementos en x u promedio de los elementos de x mediana de los elementos de x varianza de los elementos de x (calculada en n − 1).min(x) range(x) length(x) mean(x) median(x) var(x) o cov(x) cor(x) var(x. tan. exp. log2. si x es una matriz o un marco de datos. as´ como diversas funciones u´iles en estad´stica.10 <. a excepci´ n de range() o que retorna un vector de longitud 2. beta. . besselI. Si queremos agregar (o multiplicar) un mismo valor a todos los elementos o de un vector: > x > a > z > z [1] <. o entre las columnas de x y y si son matrices o marcos de datos correlaci´ n lineal entre x y y. cos. se calcula la matriz de varianza-covarianza matriz de correlaci´ n de x si es una matriz o un marco de datos (1 si x es un vector) o covarianza entre x y y. .x + y Warning message: longer object length is not a multiple of shorter object length in: x + y > z [1] 2 4 4 Note que R ha devuelto un mensaje preventivo y no un mensaje de error. abs. y cor() que pueden devolver matrices. log10.a * x 10 20 30 40 El n´ mero de funciones disponibles en R es demasiado grande para ser listado en este docuu mento. . funciones especiales (gamma. sum(x) prod(x) max(x) min(x) which. atan. ). asin. .1:3 > y <. acos. Algunas de estas funcioı t ı nes se detallan en la siguiente tabla. y var().max(x) which. ). Las siguientes funciones pueden devolver vectores m´ s complejos: a 26 . sqrt. . por lo tanto la operaci´ n fue realizada.1:2 > z <. Se pueden encontrar todas las funciones matem´ ticas simples (log. digamma. cov(). . y) cor(x.

m2) [. para hacerlo en orden descendente: rev(sort(x)) alinea los elementos de x calcula el logaritmo de x en base "base" si x es una matriz.] 2 2 [4. t´picamente comparaciones: o ı x$V1 <10). El argumento de esta funci´ n debe ser una variable de o tipo l´ gico o calcula el n´ mero de combinaciones de k eventos en n repeticiones = n!/[(n − k)!k!] u elimina las observaciones con datos ausentes (NA) (elimina la fila correspondiente si x es una matriz o un marco de datos) devuelve un mensaje de error si x contiene por lo menos un NA si x es un vector o un marco de datos.fail(x) unique(x) table(x) subset(x.round(x. los valores ı o de i para los cuales x[i] == a). para reducir solamente usar center=FALSE (por defecto center=TRUE. m2) [. ı igual que el anterior pero para el m´ ximo a un vector en el que el iavo elemento es la suma desde x[1] a x[i] igual que el anterior pero para el producto igual que el anterior pero para el m´nimo ı igual que el anterior pero para el m´ ximo a devuelve un vector de la misma longitud que x con los elementos de x que est´ n en y (NA a si no) devuelve un vector de los ´ndices de x si la operaci´ n es (TRUE) (en este ejemplo.2] [1.. y) which(x == a) choose(n. C´ lculos con Matrices a R posee facilidades para manipular y hacer operaciones con matrices. base) scale(x) pmin(x... devuelve un objeto similar pero suprimiendo elementos duplicados devuelve una tabla con el n´ mero de diferentes valores de x (t´picamente para enteros o u ı factores) devuelve una selecci´ n de x con respecto al criterio (.matrix(2.] 1 1 [2..) cumsum(x) cumprod(x) cummin(x) cummax(x) match(x. la opci´ n replace = o TRUE permite remuestrear con reemplazo 3.. ... si se desea centrar solamente utilizar scale=FALSE. .] 1 1 [3..] 1 1 2 2 [2.] 2 2 > cbind(m1. .y. . centra y reduce los datos.. nc = 2) > rbind(m1. si x es un marco de datos. Las funciones rbind() y cbind() unen matrices con respecto a sus filas o columnas respectivamente: > m1 <.3] [. nr = 2.2] [. nc = 2) > m2 <.) pmax(x.4] [1. size) redondea los elementos de x a n cifras decimales invierte el orden de los elementos en x ordena los elementos de x en orden ascendente.. la opci´ n select proporciona las variables que o se mantienen (o se ignoran con -) remuestrea al azar y sin reemplazo size elementos en el vector x..matrix(1. scale=TRUE) un vector en el que el iavo elemento es el m´nimo de x[i]. n) rev(x) sort(x) rank(x) log(x.1] [.1] [. k) na.) sample(x. nr = 2.8. y[i].] 1 1 2 2 27 .5.y.omit(x) na.

2] [.0 2.] 1 10 > diag(3) [.0 0 0 [2. 30) > diag(v) [.1] [. nc = 5) [.] 4 4 8 8 [4. La funci´ n diag se puede usar para extraer o modificar la diagonal de una matriz o para o construir una matriz diagonal: > diag(m1) [1] 1 1 > diag(rbind(m1.] 10 10 [2.1] [.2] [1. m2) [.El operador para el producto de dos matrices es ‘ %* %’.] 0.] 0 0 30 > diag(2.] 0 1 0 [3. considerando las dos matrices m1 y m2: > rbind(m1. nr = 3.] 2 2 4 4 [2.0 0. esta funci´ n tambi´ n funciona con o o o e marcos de datos.] 4 4 8 8 > cbind(m1.3] [1.5] [1.1] [.3] [.10 > m1 [. qr() para descomposici´ n. m2) [. m2) %*% rbind(m1.1] [.0 2.] 2 2 4 4 [3.c(10.1.1 0 0 R tambi´ n posee algunas fucniones para c´ lculos con matrices.2] [. Mencionamos aqui solve() e a para invertir una matriz.] 0 0 1 > v <. 20. m2) %*% cbind(m1.] 0 20 0 [3.3] [1.] 10 1 [2. o 28 .1 0. Por ejemplo.2] [.] 0.2] [1.3] [.2] [.1] [. m2)) [1] 2 2 8 8 > diag(m1) <.0 0 0 [3.4] [1.] 2.4] [.] 10 10 La transposici´ n de una matriz se realiza con la funci´ n t.] 10 0 0 [2.] 1 0 0 [2.0 0. y svd() para descomposici´ n singular. eigen() para calcular valores y vectores o propios.1] [. m2) %*% cbind(m1.1 0.

veremos los paquetes grid y lattice cuyo o a funcionamiento es diferente a las funciones gr´ ficas ‘normales’ de R. o . Dispositivos gr´ ficos que son archivos se pueden abrir con una a funci´ n que depende del tipo de archivo que se quiere crear: postscript(). a ´ El ultimo dispositivo en ser abierto. pdf(). La lista de dispositivos gr´ ficos disponibles se obtiene con el comando ?device. x11(). . el resultado de una funci´ n gr´ fica no puede o a a a ser asignado a un objeto11 sino que es enviado a un dispositivo gr´ fico. Veremos ejemplos pr´ cticos del uso de estas funa a a cionalidades en la producci´ n de gr´ ficos. La funci´ n dev. Para saber cual es el dispositivo activo: > dev.list() muestra una lista con los a o dispositivos abiertos: > x11(). a No nos es posible detallar aqui todas las posibilidades de R en t´ rminos de generaci´ n de gr´ ficas. a 4.cur() pdf 4 y para cambiar el dispositivo activo: 11 Existen algunas excepciones: hist() y barplot() producen tambi´ n resultados num´ ricos como listas o mae e trices. Un dispostivo gr´ fico se puede abrir con la funci´ n apropiada. Las gr´ ficas se producen con respecto a par´ metros gr´ ficos que est´ n definidos por a a a a defecto y pueden ser modificados con la funci´ n par. 4. 29 . png().1. Finalmente. Las ventanas gr´ ficas se llaman X11 a a bajo Unix/Linux. En Unix/Linux y Windows se puede abrir una nueva ventana gr´ fica con el comando x11() ya que en Windows existe un a alias apuntando a windows().1. El tipo de disa o positivos gr´ ficos disponibles depende del sistema operativo. ´ Haciendo graficas en R R ofrece una increible variedad de gr´ ficos. ´ Manejo de graficos Abriendo multiples dispositivos gr´ ficos a ´ Al ejecutarse una funci´ n gr´ fica. a Existen dos tipos de funciones gr´ ficas: las funciones de graficaci´ n de alto nivel que crean a o una nueva gr´ fica y las funciones de graficaci´ n de bajo nivel que agregan elementos a una gr´ fica a o a ya existente.list() X11 X11 pdf 2 3 4 Los n´ meros corresponden al n´ mero del dispositivo respectivo. R abre una ventana para mostrar el gr´ fico si no hay ning´ n o a a u dispositivo abierto. windows bajo Windows y macintosh bajo Mac. escriba el comando demo(graphics).4. o Primero veremos como manejar gr´ ficos y dispositivos gr´ ficos. Este se puede usar para camu u biar el dispositivo activo. Para darse una idea. Un dispositivo gr´ fico es una ventana gr´ fica o un archivo. pdf() > dev. Particularmente. e o a Cada funci´ n gr´ fica en R tiene un enorme n´ mero de opciones permitiendo una gran flexibilidad o a u en la producci´ n de gr´ ficos y el uso de cualquier otro paquete gr´ fico palidece en comparaci´ n. o a a o El modus operandi de las funciones gr´ ficas es sustancialmente diferente del esquema esbozaa do al principio de este documento. despu´ s veremos en detalle a a e algunas funciones gr´ ficas y sus par´ metros. se convierte en el dispositivo activo sobre el cual se dibujan (o escriben) las gr´ ficas generadas. .1.

para dividir el dispositivo en cuatro partes u iguales: > layout(matrix(1:4. 2) > mat [. R muestra el n´ mero del nuevo u o u dispositivo activo: > dev. Una parte de un dispositivo se puede dividir a a su vez en partes m´ s peque˜ as con split. 2)) Tambien es posible crear esta matriz previamente permitiendo una mejor visualizaci´ n de la o manera como se va a dividir el dispositivo: > mat <. 2.2] [1.off() cierra el dispositivo. y 2) el men´ “History” o u seleccionado cuando la ventana gr´ fica est´ activa. Por ejemplo: o a > split.screen() borra la ultima gr´ fica dibujada.off() pdf 4 Vale la pena mencionar dos caracter´sticas espec´ficas de la versi´ n de R para Windows: 1) la ı ı o funci´ n win. o a La funci´ n layout divide el dispositivo activo en varias partes donde se colocar´ n las gr´ ficas o a a de manera sucesiva. por defecto se cierra el dispositivo activo.screen() permitiendo la posibilidad de configua n raciones complejas. u 4. Su uso se debe limitar por ejemplo. de o lo contrario el correspondiente al n´ mero pasado en la funci´ n.matrix(1:4.] 1 3 [2.set(3) X11 3 La funci´ n dev. Disposici´ n de una gr´ fica o a La funci´ n split.1.1] [. pero el usuario la puede activar haciendo click en o o a “Recording” en este men´ ).screen divide el dispositivo gr´ fico activo. En este ejemplo tenemos: 30 . Estas funciones son incompatibles con otras similares (como layout() o coplot()) y no se deben usar con multiples dispositivos gr´ ficos. esta opci´ n est´ inactiva.> dev. permite ‘grabar’ todas las gr´ ficas durante una a a a sesi´ n (por defecto. 2. se puede usar la funci´ n layout.] 2 4 > layout(mat) Para visualizar la partici´ n creada.off(2) X11 3 > dev.metafile abre un dispositivo meta-archivo de Windows . a la a exploraci´ n gr´ fica de datos.show con el n´ mero de o o u sub-ventanas como argumento. Esta funci´ n tiene como argumento principal una matriz con n´ meros enteros o u indicando el n´ mero de las sub-ventanas. Por ejemplo.2. ´ erase. 2)) divide el dispositivo en dos partes que se pueden seleccionar con screen(1) o screen(2).screen(c(1.

show(6) 1 3 5 2 4 6 >m <. 2. byrow=TRUE) para numerar las sub-ventanas a lo largo de las filas. 3). Los n´ meu ros en la matriz se pueden dar en cualquier orden. 2.. y por lo tanto las sub-ventanas se numeran a lo largo de las columnas. layout() divide el dispositivo en dimensiones regulares: esto se puede modificar con las opciones widths y heights. 3.. 1. Estas dimensiones se dan de manera relativa12 . >layout(matrix(1:6. ver ?layout. 2. 3)) >layout. Por defecto. por ejemplo matrix(c(2.. 2)) >layout.show(4) 2 4 Los siguientes ejemplos demuestran algunas de las posibilidades ofrecidas por layout(). ı 31 .show(3) 1 3 2 En ninguno de estos ejemplos hemos usado la opci´ n byrow de matrix() (leer por fio las). 2) >layout(m) >layout. 4.1 3 >layout. Ejemplos: 12 Aunque pueden ser proporcionadas en cent´metros. 2). se puede especificar matrix(. 3).matrix(c(1:3.show(6) 1 2 3 4 5 6 >layout(matrix(1:6.

el promedio: fun=mean) ı gr´ fica bivariada de la primera columna de x vs.2) >layout(m. los n´ meros en la matriz pueden ser ceros dando la posibilidad de realizar arreglos u complejos (o inclusive esot´ ricos). 1)) >layout. 2. 3). 2)) >layout.1). c(1.show(4) 1 3 2 4 >m <.show(3) 1 3 >m <. y) sunflowerplot(x. la primera columna de y. la segunda a columna de x vs. 3). grafica el promedio de y (en el eje y) con respecto a los valores de f1 (en el eje x) y de f2 (curvas diferentes). 2.2.2. e 2 >m <. la opci´ n fun permite escoger un o estad´stico de y (por defecto.matrix(1:4.matrix(c(1. si x es un marco de datos. 2) >layout(m. 3)) >layout. hace un gr´ fico de puntos tipo Cleveland (gr´ ficos apilados a a fila por fila y columna por columna) 32 . heights=c(3.1. c(1. 2) >layout(m.matrix(0:3.2. Funciones graficas La tabla a continuaci´ n resume algunas de las funciones gr´ ficas en R. 5) 1: 0 0 3 3 3 1 1 3 3 3 11: 0 0 3 3 3 0 2 2 0 5 21: 4 2 2 0 5 26: Read 25 items >layout(m) >layout.matrix(scan(). heights=c(1. etc. la segunda columna de y.show(2) 2 1 Finalmente.y) dotplot(x) graficar los valores de x (en el eje y) ordenados en el eje x gr´ fico bivariado de x (en el eje x) y y (en el eje y) a igual a plot() pero los puntos con coordenadas similares se dibujan como flores con el n´ mero de p´ talos igual al n´ mero de puntos u e u gr´ fico circular tipo ‘pie’ a gr´ fico tipo ‘box-and-whiskers’ a gr´ fico de los valores de x en una l´nea (como alternativa a boxplot() para peque˜ os a ı n tama˜ os de muestra) n gr´ fico bivariado de x y y para cada valor o intervalo de valores de z a si f1 y f2 son factores. widths=c(2.plot (f1. o a plot(x) plot(x. y) matplot(x.>m <. y) piechart(x) boxplot(x) stripplot(x) coplot(x˜y | z) interaction. 1). widths=c(1. f2. 5.show(5) 4 1 2 3 5 ´ 4.

term´ metros o cajas) cuyos tama˜ os. a donde cada fila de x es representada por una estrella. ylim= xlab=. colores . x puede ser multivariada pero las series deben tener la misma frecuencia y fechas ts.ts(x) si x es un objeto de clase "ts". debe ser de tipo caracter ı sub-t´tulo (escrito en una letra m´ s peque˜ a) ı a n xlim=.obj) a o fourfoldplot(x) Las opciones y argumentos para cada una de estas opciones se pueden encontrar en la ayuda ´ incorporada en R.utilizando cuartos de c´rculos. . . deben ser variables de tipo caracter t´tulo principal. y. gr´ fico de contornos (los datos son interpolados para dibujar las curvas). grafica x con respecto al tiempo.) los. "h": l´neas verticales. pero las areas entre contornos est´ n coloreadas. length(y)) (x y y pueden ser omitidos) ´ filled. 10) o xlim=range(x) tı’tulos en los ejes. z) igual al anterior pero con colores (se grafican los datos crudos) persp(x.obj) gr´ fico de los efectos (parciales) de un modelo de regresi´ n (mod. dibuja una gr´ fica con segmentos o una estrella. estrellas. y. o una matriz de dim=c(2. pero las l´neas est´ n sobre los ı ı a puntos. y. k). dibuja. en las coordenadas dadas por x y y. 2. x y y deben a z) ser vectores. "s": escaleras.contour igual al anterior. dibuja todas las posibles gr´ ficas bivariadas a entre las columnas de x plot.. s´mbolos (c´rculos.. cuadrados. ´ Comandos de graficacion de bajo nivel R posee un conjunto de funciones gr´ ficas que afectan una gr´ fica ya existente: comandos de a a graficaci´ n de bajo nivel.3. y. y las columnas son las longitudes de los segmentos symbols(x. z debe ser una matriz tal que dim(z)=c(length(x). "b": puntos coa ı nectados por l´neas. "S": igual al anterior peı ro los datos se representan como la parte inferior de las l´neas verticales ı especifica los l´mites inferiores y superiores de los ejes. "p": puntos. z) de colores image(x. rect´ nguı ı a . Estos son los principales: o 33 . visualiza la asociaci´ n entre dos variables dicot´ micas ı o o para diferentes poblaciones (x debe ser un arreglo de dim=c(2. los datos se representan ı como la parte superior de las l´neas verticales. y. por ejemplo con ı xlim=c(1. son especificados con o n argumentos adicionales termplot(mod. 2) si k = 1) assocplot(x) Gr´ fica ‘amigable’ de Cohen mostrando desviaciones de independencia de filas y coa lumnas en una tabla de contingencia de dos dimensiones mosaicplot(x) gr´ fico ‘mosaico’ de los residuales de una regresi´ n log-lineal de una tabla de contina o gencia pairs(x) si x es una matriz o un marco de datos. las series pueden tener diferentes fechas pero la misma frecuencia hist(x) histograma de las frecuencias de x barplot(x) histograma de los valores de x qqnorm(x) cuartiles de x con respecto a lo esperado bajo una distribuci´ n normal o qqplot(x.plot(x) igual a la anterior pero si x es multivariado. ylab= main= sub= 4. . y se dibuja una leyenda a (x. estas e a son las principales (con sus valores por defecto): add=FALSE axes=TRUE type="p" si es TRUE superpone el gr´ fico en el ya existente (si existe) a si es FALSE no dibuja los ejes ni la caja del gr´ fico a especifica el tipo de gr´ fico.o": igual al anterior. "l": l´neas. z) igual al anterior pero en perspectiva (se grafican los datos crudos) stars(x) si x es una matriz o un marco de datos. Algunas de estas opciones son id´ nticas para varias funciones gr´ ficas. y) cuartiles de y con respecto a los cuartiles de x contour(x.

labels.y0) hasta el punto (x1. superior e inferior est´ n a a dadas por x1. por ejemplo para incluir el valor de R2 (calculado anteriomente y guardado en un objeto Rsquared): > text(x. . o a > text(x. donde la funci´ n expression transforma su argumento en una ecuao ci´ n matem´ tica. 1+eˆ-(beta*x+alpha)))) se ver´ en la gr´ fica como la siguiente ecuaci´ n en el punto de coordenadas (x. y y2. y): a a R2 = 0.) segments(x0. x2. vect) rug(x) locator(n.. expression(p == over(1. line especifica la linea del area de graficado dibuja una l´nea desde el punto (x0.y) con s´mbolos dados por legend ı agrega un t´tulo y opcionalmente un sub-t´tulo ı ı agrega un eje en la parte inferior (side=1).obj (ver secci´ n 5) ı o o dibuja un rect´ ngulo donde las esquinas izquierda. derecha..obj) rect(x1. superior (3). y) lines(x. names) agrega texto dado por text en el margen especificado por side (ver axis() m´ s a ´ abajo). legend) title() axis(side. y. y1.. code=2) abline(a. y.) mtext(text. tambi´ n dibuja s´mbolos (type="p") o l´neas (type="l") con respecto o e ı ı a par´ metros gr´ ficos opcionales (. side=3.). y) despu´ s que el usuario a hecho click n veces en el gr´ fico e a con el rat´ n.) identify(x. x2.. y) legend(x.. o derecha (4).y1) ı igual al anterior pero con flechas desde (x0.. y) text(x. text(x. list(r=Rsquared)))) se ver´ en la gr´ fica en el punto con coordenadas (x.expression. y.. un uso t´pico: plot(x. .. angle controla el angulo desde la base de la flecha hasta la punta de la misma dibuja una l´nea con pendiente b e intercepto a ı dibuja una l´nea horizontal en la ordenada y ı dibuja una l´nea vertical en la abcisa x ı dibuja la l´nea de regresi´ n dada por lm.)). y. angle= 30. Note la posibilidad de agregar expresiones matem´ ticas en una gr´ fica con text(x. y0. y.. al punto (x1. x1. se pueden utilizar las funciones substitute y o as. Por ejemplo. y1.. y. . as.y1) si ´ code=1. o en ambos si code=3.y0) si code=2. y2) polygon(x. y): a a o p= 1 1 + e−(βx+α) Para incluir una variable en una expresi´ n..y). izquierda (2). type="n". . y0. y. respectivamente dibuja un pol´gono uniendo los puntos dados por x y y ı agrega la leyenda en el punto (x. line=0. a a expression(.9856298 34 .) agrega puntos (se puede usar la opci´ n type=) o igual a la anterior pero con l´neas ı agrega texto dado por labels en las coordenadas (x. por defecto no se dibuja nada (type="n") a a similar a locator() con la diferencia que imprime en la gr´ fica el valor de x (u a opcionalmente de una leyenda especificada en la opci´ n labels=) m´ s cercano al o a punto donde se hizo click.b) abline(h=y) abline(v=x) abline(lm.. vect (opcional) da la abscisa (u ordenada) donde se deben dibujar los marcadores (‘tick marks’) del eje dibuja los datos x en el eje x como peque˜ as l´neas verticales n ı devuelve las coordenadas (x. y1. y1) arrows(x0. x1.expression(substitute(Rˆ2==r.points(x. ı type="n"). Util para identificar puntos en la gr´ fica que est´ n asociados a a con nombres.

la presentaci´ n de gr´ ficos a o o o a se puede mejorar con par´ metros gr´ ficos adicionales. 3))))) R2 = 0.986 ´ ´ 4. en la siguiente tabla ilustramos solo los m´ s usados. y.Para ver solo tres cifras decimales. podemos modificar el c´ digo de la siguiente manera: o > text(x. as. 3))))) que se ver´ como: a R2 = 0. el siguiente comando: a > par(bg="yellow") dar´ como resultado que todos los gr´ ficos subsecuentes tendr´ n el fondo de color amarillo. o usando la funci´ n par para cambiar de a o manera permanente par´ metros gr´ ficos.expression(substitute(Rˆ2==r. Parametros graficos Adem´ s de la utilizaci´ n de comandos de graficaci´ n de bajo nivel. + list(r=round(Rsquared. La lista completa de par´ mea a a tros gr´ ficos se puede ver con ?par. + list(r=round(Rsquared. Exisa a a ten 68 par´ metros gr´ ficos y algunos tienen funciones muy similares. es decir gr´ ficas subsecuentes se dibujar´ n con respecto a a a a a los par´ metros especificados por el usuario. Por ejemplo. as.986 Finalmente para escribir la R en cursivas: > text(x. a a 35 .4. y. Estos se pueden utilizar como opciones a a de funciones gr´ ficas (pero no funciona para todas).expression(substitute(italic(R)ˆ2==r.

"7".1. 2) ı " un entero que controla el tama˜ o (en puntos) de textos y s´mbolos n ı un caracter que especifica el tipo de regi´ n a graficar. : bg=¨ed".1.axis. a para ajustarse a un estilo editorial pre-definido o para darle un toque personal para una charla.sub ı ı controla el color de los s´mbolos. ..lab. "m": m´ xima o a un valor que especifica la longitud de los marcadores de eje como una fracci´ n de la altura o anchura o m´ xima del gr´ fico.)) o if yaxt="n" el eje y se coloca pero no se muesttra (util en conjunci´ n con axis(side=2. (1: s´ lida. o un caracter entre ¨ (Fig.nc) que divide la ventana gr´ fica como una matriz con nr filas y nc columa nas. 4. si tck=1 se dibuja una rejilla a a un valor que especifica la longitud de los marcadores de eje como una fracci´ n de la altura de una l´nea o ı de texto (por defecto tcl=-0. 3: punteada. La lista de los 657 colores disponibles se puede ver con colors()) controla el tipo de caja que se dibuja alrededor del gr´ fico: ¨". "l".main.1. "s": cuadrada. y) y la gr´ fica ser´ visible en el dispositivo gr´ fico activo. de los elementos dibujados y los blancos.5) si xaxt="n" el eje x se coloca pero no se muesttra (util en conjunci´ n con axis(side=1. el usuario puede cambiar la manera como se presenta la gr´ fica. 1: horizontal. cex. ´ Un ejemplo practico Para ilustrar algunas de las funcionalidades gr´ ficas de R.lab. los valores por defecto son c(5. derecha). cex. El resultado se puede ver en la Fig. . 4: negrilla cursiva). izquierda.sub un entero que controla la orientaci´ n de los caracteres en los ejes (0: paralelo a los ejes. 3. 2: cursiva. como en cex existen: font.. La 36 . bg=¨ r blue". 4.2) a e o igual al anterior. las gr´ ficas se dibujan sucesivamente en las columnas (v´ ase la secci´ n 4.. t´tulos en los ejes. la ubicaci´ n de las etiquetas en los ejes. simplemente se escribe el a comando: > plot(x. Estos valores se generaron a con: > x <. si bty="n" no se dibuja la caja un valor que controla el tama˜ o del texto y s´mbolos con respecto al valor por defecto. superior.2) a o controla el tipo de s´mbolo. R dibuja gr´ ficas de una manera “inteligente”: los espacios entre los marcadores de los a ejes. 0.5 centrado. pero las gr´ ficas se dibujan en las filas (ver secci´ n 4. ya sea un entero entre 1 y 25.axis. 6: dos l´neas cortas).rnorm(10) > y <. por ejemplo.axis. o 2: perpendicular a los ejes. los siguientes n ı par´ metros tienen el mismo control para n´ meros en los ejes.1. cex. cex. . col.sub un entero que conrola el estilo del texto (1: normal.. . y el subt´tulo.adj bg bty cex col font las lty lwd mar mfcol mfrow pch ps pty tck tcl xaxt yaxt controla la justificaci´ n del texto (0 justificado a la izquierda. col. 3: vertical) un entero o caracter que controla el tipo de las l´neas.rnorm(10) La gr´ fica que queremos visualizar se puede obtener con plot(). Por a a a defecto. font. 4: puntoı o l´nea. etc. 2. como en cex estos son: col. consideremos un ejemplo simple de a una gr´ fica bivariada con 10 pares de coordenadas generadas al azar. por ejemplo lty="44" tendr´ el mismo efecto que lty=2 a un n´ mero que controla la anchura de las l´neas u ı un vector con 4 valores num´ ricos que controla el espacio entre los ejes y el borde de la gr´ fica en la fore a ma c(inferior. font.)) o 4.main y font. 3: negrilla. son calculados autom´ ticamente de tal manera o a que la gr´ fica resultante sea lo mas legible posible. a u ı el t´tulo principal. ¨".1) un vector del tipo c(nr. 2: quebrada.5.1.main y ı col. o una secuencia de hasta 8 caracteres (entre "0" y ı ı ı "9") que especifica alternativamente la longitud en puntos o pixeles. ¨" o "]" (la caja se a o c u parece a su respectivo caracater). 1 justificado a la derecha) o especifica el color del fondo (ej. 5: l´nea larga-corta. a Sin embargo.lab. .

bg=" yellow".0 Figura 3: La funci´ n plot usada sin opciones. o 37 .0 x 0. . ).0 −0.1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 "*" "?" ".5 −0.5 0." "X" "a" * ? X a Figura 2: Los s´mbolos gr´ ficos en R (pch=1:25).". y −1.5 1. . "?". .0 0. Los colores se obtuvieron con las opciones ı a col="blue". ". la segunda opci´ n tiene efecto solo sobre los s´mbolos 21– o ı 25. Se puede usar cualquier caracter (pch="*".5 0.

Cómo personalizar un gráfico en R
2

Otros diez números

1

0

−1

−2 −2 −1 0 1 2

Diez números al azar

Figura 4: La funci´ n plot usada con opciones. o

manera m´ s simple de cambiar un gr´ fico es a trav´ s de la adici´ n de opciones que permiten modia a e o ficar los argumentos dados por defecto. En nuestro ejemplo, podemos modificar significativamente la figura de la siguiente manera: plot(x, y, xlab="Diez numeros al azar", ylab="Otros diez numeros", xlim=c(-2, 2), ylim=c(-2, 2), pch=22, col="red", bg="yellow", bty="l", tcl=0.4, main="Como personalizar un grafico en R", las=1, cex=1.5) El resultado se ve en la Fig. 4. Miremos con detalle cada una de las opciones utilizadas. Primero, xlab y ylab cambian los t´tulos de los ejes, que por defecto son los nombres de las variables. ı Ahora, xlim y ylim nos permiten definir los l´mites en ambos ejes13 . El par´ metro gr´ fico pch ı a a es utilizado como una opci´ n: pch=22 especifica un cuadrado con contorno y fondo de diferentes o colores dados respectivamente por col and bg. La tabla de par´ metros gr´ ficos explica el signia a ficado de las modificaciones hechas por bty, tcl, las and cex. Finalmente, adicionamos un t´tulo con main. ı Los par´ metros gr´ ficos y las funciones de graficaci´ n de bajo nivel nos permiten modificar a a o a´ n m´ s la presentaci´ n de un gr´ fico. Como vimos anteriormente, algunos par´ metros gr´ ficos u a o a a a no se pueden pasar como argumentos en funciones como plot. Modificaremos algunos de estos par´ metros con par(), y por ende es necesario escribir varios comandos. Cuando se cambian a ´ los par´ metros gr´ ficos es util guardar sus valores iniciales previamente para poder restaurarlos a a posteriormente. Aqui est´ n los comandos utilzados para obtener la Fig. 5. a opar <- par() par(bg="lightyellow", col.axis="blue", mar=c(4, 4, 2.5, 0.25)) plot(x, y, xlab="Diez numeros al azar", ylab="Otros diez numeros", xlim=c(-2, 2), ylim=c(-2, 2), pch=22, col="red", bg="yellow", bty="l", tcl=-.25, las=1, cex=1.5) title("Como personalizar un grafico en R (bis)", font.main=3, adj=1) par(opar)
defecto, R agrega 4 % a cada lado del l´mite del eje. Este comportamiento se puede alterar modificando los ı par´ metros gr´ ficos xaxs="i" y yaxs="i" (se pueden pasar como opciones a plot()). a a
13 Por

38

Cómo personalizar un gráfico en R (bis)
2

1 Otros diez números

0

−1

−2 −2 −1 0 Diez números al azar 1 2

Figura 5: Las funciones par, plot y title.

Miremos con detalle las acciones resultantes de estos comandos. Primero, los par´ metros gr´ fia a cos por defecto se copian en una lista llamada opar. Modificaremos tres par´ metros: bg el color a del fondo, col.axis el color de los n´ meros en los ejes, y mar los tama˜ os de los m´ rgenes en u n a los bordes del gr´ fico. La gr´ fica se dibuja de una manera muy similar a como se hizo la Fig. 4. a a ´ las modificaciones de los m´ rgenes permiten utilizar el espacio alrededor del area de graficado. a El t´tulo se a˜ ade con la funci´ n de bajo nivel title lo que permite agregar algunos par´ metros ı n o a como argumentos sin alterar el resto de la gr´ fica. Finalmente, los par´ metros gr´ ficos iniciales se a a a ´ restauran con el ultimo comando. Ahora, control total! En la Fig. 5, R todav´a determina algunas cosas tales como el n´ mero ı u ´ de marcadores en los ejes, o el espacio entre el t´tulo y el area de graficado. Veremos ahora como ı controlar totalmente la presentaci´ n de la gr´ fica. La estrategia que vamos a usar aqui es dibujar o a primero una gr´ fica en blanco con plot(..., type="n"), y despues agregar puntos, ejes, a etiquetas, etc., con funciones de graficaci´ n de bajo nivel. Incluiremos algunas novedades como o ´ cambiar el color del area de graficado. Los comandos se encuentran a continuaci´ n y la gr´ fica o a resultante se puede ver en la Fig. 6. opar <- par() par(bg="lightgray", mar=c(2.5, 1.5, 2.5, 0.25)) plot(x, y, type="n", xlab="", ylab="", xlim=c(-2, 2), ylim=c(-2, 2), xaxt="n", yaxt="n") rect(-3, -3, 3, 3, col="cornsilk") points(x, y, pch=10, col="red", cex=2) axis(side=1, c(-2, 0, 2), tcl=-0.2, labels=FALSE) axis(side=2, -1:1, tcl=-0.2, labels=FALSE) title("Como personalizar un grafico en R (ter)", font.main=4, adj=1, cex.main=1) mtext("Diez numeros al azar", side=1, line=1, at=1, cex=0.9, font=3) mtext("Otros diez numeros", line=0.5, at=-1.8, cex=0.9, font=3) mtext(c(-2, 0, 2), side=1, las=1, at=c(-2, 0, 2), line=0.3, col="blue", cex=0.9) mtext(-1:1, side=2, las=1, at=-1:1, line=0.2, col="blue", cex=0.9) par(opar)

39

Otros diez números

Cómo personalizar un gráfico en R (ter)

1

0

−1

−2

0

Diez números al azar

2

Figura 6: Una gr´ fica “hecha a mano”. a

Como se hizo anteriormente los par´ metros gr´ ficos por defecto se guardan y el color del a a fondo y las m´ rgenes se modifican. La gr´ fica se dibuja con type="n" para no colocar los a a puntos, xlab=“”,ylab=“” para no escribir t´tulos en los ejes, y xaxt="n", yaxt="n" para ı ´ no dibujar los ejes. Esto resulta en que se dibuja solamente la caja alrededor del area de graficado y se definen los ejes con respecto a xlim y ylim. Note que hubi´ ramos podido usar la opci´ n e o axes=FALSE pero en ese caso, ni los ejes ni la caja hubieran sido dibujados. Los elementos se adicionan en la regi´ n de la gr´ fica con la ayuda de las funciones de bajo o a ´ rea de graficado se cambia con rect(): el nivel. Antes de agregar los puntos el color dentro del a ´ tama˜ o del rect´ ngulo se escoge de tal manera que es substanciamente m´ s grande que el area de n a a graficado. Los puntos se dibujan con points() utilizando un nuevo s´mbolo. Los ejes se agregan ı con axis(): el vector especificado como segundo argumento determina las coordenadas de los marcadores de los ejes. La opci´ n labels=FALSE especifica que no se deben escribir anotao ciones con los marcadores. Esta opci´ n tambi´ n acepta un vector de tipo caracter, por ejemplo o e labels=c(‘‘A’’, ‘‘B’’, ‘‘C’’). El t´tulo se adiciona con title(), pero el tipo de letra se cambia ligeramente. Las anotacioı nes en los ejes se escriben con mtext() (texto marginal). El primer argumento de esta funci´ n es o un vector tipo caracter que proporciona el texto a ser escrito. La opci´ n line indica la distancia o ´ al area de graficado (por defecto line=0), y at la coordenada. La segunda llamada a mtext() utiliza el valor por defecto de side (3). Las otras dos llamadas a mtext() pasan un vector num´ rico como el primer argumento: esto ser´ convertido a un caracter. e a 4.6. Los paquetes grid y lattice

Los paquetes grid y lattice son la implementaci´ n de las gr´ ficas Trellis de S-PLUS en R. o a Trellis es un m´ todo para visualizar datos multivariados y es particularmente apropiado para la e exploraci´ n de relaciones e interacciones entre variables14 . o La idea principal detr´ s de lattice (y Trellis) es gr´ ficas condicionales m´ ltiples: una gr´ fica a a u a bivariada se divide en varias gr´ ficas con respecto a los valores de una tercera variable. La funci´ n a o coplot usa una aproximaci´ n similar, pero grid ofrece mucho m´ s flexibilidad y funcionalidad o a que coplot.
14 http://cm.bell-labs.com/cm/ms/departments/sia/project/trellis/index.html

40

Nuesı tro ejemplo ser´ ligeramente m´ s complicado con la superposici´ n en cada gr´ fico de las curvas a a o a de densidad emp´ricas con las curvas esperadas bajo una distribuci´ n normal. n)) densityplot(˜ x | y. La f´ rmula proporcionada como o argumento es la t´picamente utilizada. 5) x <. x debe ser num´ rico. Primero. el paquete debe ser cargado en memoria con el comando library(lattice) para poder acceder sus funciones..rnorm(sum(n)) y <. a Desde un punto de vista pr´ ctico. como se ver´ en los ejemplos m´ s abajo. mientras que lattice contiene las funciones m´ s com´ nmente usadas. y puede ser e num´ rico. Empecemos con los gr´ ficos de funciones de densidad.. Los comandos son: a a n <.factor(rep(n. panel = function(x. y) resultan en gr´ ficas id´ nticas a e 15 Este 41 . o plot(y ˜x) y plot(x. a a u La mayor parte de las funciones en lattice toman una f´ rmula como argumento principal.seq(5. Sin embargo. caracter. x debe ser num´ rico. por o ejemplo. y ˜x16 . Estas ultimas se “esconden” cuando lattice es cargado en memoria. a 16 plot() tambien acepta f´ rmulas como argumento principal: si x y y son dos vectores de la misma longitud. y y z a deben ser de la misma longitud) matriz de gr´ ficos bivariados a gr´ fico de coordenadas paralelas a Algunas funciones en lattice tienen el mismo nombre que algunas de las funciones gr´ ficas en a ´ el paquete base. en este ultimo a a caso se crea una gr´ fica m´ ltiple con respecto a los valores de z. . a La siguiente tabla resume las funciones principales en lattice. o factor pero debe tener por lo menos dos niveles e gr´ ficos bivariados (con muchas funcionalidades) a gr´ fico coloreado de los valores de z en las coordenadas dadas por x y y (x. labels=paste("n =". Veamos algunos ejemplos para ilustrar algunos aspectos de lattice. La f´ rmula y ˜x | z significa que la gr´ fica de y con respecto a x ser´ dio a a bujada como diferentes gr´ ficas con respecto a los valores de z. Este nuevo modo tiene su propio sistema de par´ metros gr´ ficos muy distinto a lo que a a a hemos visto hasta ahora. n). porque estos paquetes usan un novedoso modo gr´ fico15 . Estos gr´ ficos se pueden hacer simplea a mente con el comando densityplot(˜x) resultando en una curva con la funci´ n de densidad o emp´rica donde los puntos corresponden a las observaciones en el eje x (similar a rug()). pero todas estas funciones aceptan f´ rmulas condicionales ı o ´ (y ˜x | z) como argumento principal. y puede ser un factor a e cuartiles para comparar dos distribuciones. a u barchart(y ˜x) bwplot(y ˜x) densityplot(˜x) dotplot(y ˜x) histogram(˜x) qqmath(˜x) stripplot(y ˜x) qq(y ˜x) xyplot(y ˜x) levelplot(z ˜x*y) splom(˜x) parallel(˜x) histograma de los valores de y con respecto a los de x gr´ fico tipo “box-and-whiskers” a gr´ fico de funciones de densidad a gr´ fico de puntos tipo Cleveland (gr´ ficos apilados l´nea por l´nea y columna por a a ı ı columna) histograma de las frecuencias de x cuartiles de x de acuerdo a los esperado con una distribui´ n te´ rica o o gr´ fico uni-dimensional. es posible usar ambos modos gr´ ficos en la misma sesi´ n a o y en el mismo dispositivo gr´ fico.Las gr´ ficas producidas por grid o lattice no se pueden combinar o mezclar con aquellas a producidas por las funciones vistas anteriormente. grid contiene todas las funciones necesarias para el modo a gr´ fico. Es necesario usar el ı o argumento panel que define lo que se dibujar´ en cada gr´ fica. 45.) { modo gr´ fico remedia algunas de las debilidades del paquete base tal como falta de interactividad con las a gr´ ficas.

cat <.max(quakes$depth) int <. hemos definido una funci´ n que llama a otras dos funciones o predefinidas en lattice: panel.densityplot(x. 15.min(quakes$depth) maxi <.2 0 n = 20 −2 0 n = 40 2 4 n = 45 n = 25 n = 30 0. Despu´ s viene la llamada a la funci´ n n e o densityplot() lo que produce una gr´ fica para cada sub-muestra. 8 muestra la localizaci´ n geogr´ fica de los eventos s´smicos con respecto a su profundio a ı dad.8 0. inf + int.2 0 Density n=5 0. . Los siguientes ejemplos utilizan algunas de las conjuntos de datos disponibles en R: la localizaci´ n de 1000 eventos s´smicos cerca de las islas Fiji.4 0.4 0.4 0. o panel. args=list(mean=mean(x). Fig. sep="-")) 42 .) panel. col="darkblue") }) Las primeras tres l´neas generan una muestra aleatoria tomada de una distribuci´ n normal. y 45. ı o la cual es submuestras de tama˜ o 5.densityplot es llamada por defecto si no se especifica ning´ n o u argumento en panel: el comando densityplot(˜x | y) hubiera dado como resultado la misma Fig. maxi..seq(mini.densityplot que dibuja la funci´ n de densidad emp´rica.−4 n = 35 0. col="DarkOliveGreen". . y algunas medidas florales tomadas para o ı tres especies de iris.factor(floor(((quakes$depth . int) quakes$depth.6 0. labels=paste(inf. .mathdensity(dmath=dnorm. .6 0.mathdensity que dibuja la funci´ n de densidad te´ rica asumiendo una distribuci´ n o o o normal. y o ı panel.8 0.mini)/9) inf <.. Los comandos necesarios para crear esta gr´ fica son: a data(quakes) mini <. .8 0. En este ejemplo. sd=sd(x)).mini) / int)).2 0 −4 −2 0 2 4 n = 10 n = 15 −4 x −2 0 2 4 Figura 7: La funci´ n densityplot. 7 pero sin las curvas azules.ceiling((maxi .6 0. 10. La funci´ n panel. panel toma una fucni´ n a o como argumento.

plot(quakes$long ˜quakes$lat).get()[["superpose. y utiliza varias opciones que veremos en detalle. data = quakes) El primer comando carga los datos de quakes en memoria.−40 472−544 185 180 175 170 165 256−328 −30 −20 −10 616−688 544−616 328−400 400−472 185 long 180 175 170 165 40−112 185 180 175 170 165 −40 −30 −20 −10 lat −40 −30 −20 −10 112−184 184−256 Figura 8: La funci´ n xyplot con los datos en “quakes”.superpose para superponer los grupos en la misma gr´ fica. la sobreposici´ n entre diferentes especies es lo suficientemente baja y o permite diferenciar claramente entre ellas en la figura (Fig.75. 9). pero aqui se o pueden especificar varios argumentos en un vector: "p" para dibujar puntos y "smooth" para dibujar una curva que se ajuste a los datos con un grado de flexibilidad especificado por span. La opci´ n groups. como su nombre lo o sugiere. span=. argumento data indicando donde se deben buscar las variables Con los datos en iris. 43 . Vimos anteriormente la opci´ n panel a o que define como se respresentar´ n los diferentes grupos en la gr´ fica: aqui usamos una funci´ n a a o predefinida panel. Los comandos son: data(iris) xyplot( Petal. se llama a la funci´ n xyplot con su f´ rmula apropiada y un o o 17 . define grupos que ser´ n usados por otras opciones. pero esto o a 17 plot() no puede tomar argumentos tipo data. o xyplot(lat ˜ long | depth. y=0. "smooth").85. text = list(levels(iris$Species))) ) La llamada a la funci´ n xyplot es un poco m´ s compleja aqui que en los ejemplos anteo a riores.superpose.15. la sintaxis es un poco complicada aqui.symbol"]]$col[1:3]. key = list(x=0. data = iris. points=list(col=trellis. especifica como representar los datos. o ı Por ejemplo.Length ˜ Petal. ı Una vez definidas las variables. pch = 1). Los siguientes 5 comandos crean un factor dividiendo la profundidad (variable depth) en 9 intervalos equivalentes (con el mismo rango): los niveles del factor son enumerados con el l´mite superior e inferior de estos intervalos. como en plot(). panel = panel. La opci´ n key agrega una leyenda a la gr´ fica. la localizaci´ n de las variables se debe especificar expl´citamente.par.superpose. La opci´ n type. type = c("p". groups=Species.cat.Width. asi que se usar´ n los colores por defecto para distinguir los a grupos. No pasamos a opciones a panel.

ı ı 44 . pscales = 0. o ser´ simplificado en versiones futuras de lattice a algo similar a la funci´ n legend utilizada en a o las gr´ ficas est´ ndar de R.superpose. y los nombres de las variables se re-definieron para mostrarlos en dos l´neas ("\n" codifica un caracter de retorno a nueva l´nea). Por defecto.5 Petal. "Sepal\nWidth". pch = 1). Veremos ahora la funci´ n splom con los mismos datos en iris. "Petal\nLength")) Ya que las sub-gr´ ficas son relativamente peque˜ as. 11. 10: splom( ˜iris[1:4]. pero esta ultima no puede hacer gr´ ficas a condicionales como la de la Fig.get()[["superpose. key = list(columns = 3.7 o o o o o o o 6 setosa versicolor virginica 5 o Petal. text = list(c("Setosa". points = list(col=trellis. ´ La Fig. el nombre de la especie. el argumento principal es una matriz (las primeras cuatro columnas de iris). agregamos dos opciones para mejorar la a n legibilidad de la figura: pscales = 0 omite los marcadores en los ejes (todas las sub-gr´ ficas a se dibujan en la misma escala). splom agrega el texto “Scatter Plot Matrix” o a bajo el eje x: para evitar esto.symbol"]]$col[1:3]. Las otras opciones son similares a las o del ejemplo anterior con excepci´ n de columns = 3 en key que se especifica as´. el cual es por o supuesto. data = iris. panel = panel. o points especifica el tipo de s´mbolo.5 Figura 9: La funci´ n xyplot con los datos de “iris”. key toma una lista como argumento: x y y indican la localizaci´ n de a a o la leyenda (si las coordenadas son omitidas la leyenda se coloca fuera de la regi´ n de dibujo). 10 se pudo haber hecho con pairs().Width 2 2.par. usamos la opci´ n xlab=“”. el cual es extraido de las definiciones por defecto (por eso ı la expresi´ n ligeramente complicada).5 1 1. para que la o ı leyenda se presente en tres columnas. varnames = c("Sepal\nLength".Length 4 o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o 3 o 2 1 0 o o o o o o o o o o o o o o o o o o o o o o 0. data = iris. a como en la funci´ n est´ ndar pairs. Los siguientes comandos o se usaron para producir la Fig. y text proporciona el texto de la leyenda. groups = Species. "Versicolor". xlab = "". El c´ digo es relativamente simple: o splom(˜iris[1:3] | Species. "Virginica"))) ) Esta vez. El resultado es un conjunto de todos los posibles gr´ ficos bi-variados entre las columnas de la matriz.

Width oo o o oo oo oo oo o oo oo oo o o o oo o oooooo ooo 1 o o o ooo o o 0.5 1 o oo oo ooo o o o oo o o oooo o ooo ooo o o 0 7 o ooo o oo o o 4 5 6 7 ooo oo o o oooo o o o oo o oo oo o 6 o oo ooooooo o o ooo oooooo oooo o o oo ooooo oo o oo o o o o oo ooo o o o o o oo oooo oooo oo 5 oooo ooo ooo oo oo oooo oo o o ooo o oo ooooo o oo oooooooo o oo oooo oo oooooo o oo oo oo oo oooo o oooo 4 Petal.5 oo o o oo oo oo o Sepal.5 o o o ooooooo ooooo o o o o ooooooooooo o o oooo o oo ooo oo oo o 0 0.Length 4 ooo o oooo o oo o oo o oo o o oo o o oo oo o oo oo ooo o oo oooo oooooo o ooo o o o o ooo oo ooo o ooo o oooo o ooooo oo o o o o o o o oo ooo oo o oo oooo o o ooo oo oooooooo o o o o ooooo o o o ooo o o ooooooo o o o ooo oo o oo o oo o o oo o oo oo oo o o o o o o oo o o o o o oooo oo oooooooooooooo o o o 1 2 3 4 8 7 4.Length6 5 5 6 oo oo o oo o o oo o o o oo o oo o o o o o oooo o o oo o oo oo o o ooo o ooo ooo oo o oooo o o o oo oo o o oooo o o oo o o o oooooooo o o ooo o o oo oo o o o ooo o o oo oo o o o o o o oo o o o oo o ooo o oo oo o o ooo o oo oo o oooo oooooo o o oo oooo o oooooo o o o ooo o oooo o o ooooo o o ooo ooo o o oooo o oo o o oo oo o o o o oo o o oo ooo o oo o o ooooooo ooooo ooo o o o ooooo ooooo o oo oo o ooo o o ooo oo o o oooo oo o o oo o o o oooo oo ooo o o o o o o oo o ooo ooooooooo o o o o oooo oo ooooo oo o o o o o ooooo oo o oooo o o o ooo oooo o o o o o o o ooo oooooo oo oo o o oooo o ooo o o o ooo Figura 10: La funci´ n splom con los datos de “iris” (1).5 4 4.5 3 2 o o ooo o ooo o o o o o ooo o oooooo oo oooooooo oo oo o oooo o o ooooo o o o oo o oo ooo oooooooo oo ooo o o oo o o o o o oo o ooo o ooooooooo o o ooooooo o oooo o o oo 3 2 1 o oo oooo oooooo oooo o o oo oo o ooo oooo o ooo o o o o ooo oo o 7 8 Sepal.5 oo o oo o oo o o o ooo o o oo o oo o oo o o o oo oo ooooo oo o o ooo o oo 2 oo o o o o oo oooo o o oo o o o o oooooo o o o ooo o o ooooo o o oo o o o o oo o oo ooo oo o ooo oo o oo o oo oo o oo o o o o oooooooo 1.Setosa Versicolor Virginica o o o o o oo oo o o o o oooo o 2.5 1. o 45 .5 o ooooo oo ooo ooo ooo ooo o o oo o oo o o oo oo o o oooooo ooo oo o oooo Petal.5 o oo 4 o ooo o o o o ooo oo o 3. o virginica Petal Length Sepal Width Sepal Length setosa Petal Length versicolor Petal Length Sepal Width Sepal Width Sepal Length Sepal Length Scatter Plot Matrix Figura 11: La funci´ n splom con los datos de “iris” (2).5 o 3.Width o oo 3 oo o 2.5 2 2.5 o 2 2.

otros est´ n dentro del grupo recommended ya que usan m´ todos comunmente utilizados en estad´tica. Concluiremos con un mirada r´ pida a los diferentes paquetes. pero esta funci´ n toma una tabla de e o 46 .Length Sepal. Los distintos valores de un individuo se unen por una l´nea. Con los datos de iris. el eje y). 12 usando el siguiente c´ digo: o parallel(˜iris[. ´ Analisis estad´sticos con R ı Tal como con los gr´ ficos.Width versicolor Max virginica Petal. Algunas de las funciones para an´ lisis de datos a a est´ n en base pero la gran mayor´a de los m´ todos estad´sticos disponibles en R est´ n distribuia ı e ı a dos como paquetes packages. a e s y finalmente mucho otros paquetes est´ n dentro del grupo contributed y debe ser instalados por el a usuario. es imposible ahondar en detalles acerca de todas las posibilidades a ofrecidas por R para realizar an´ lisis estad´sticos. Las variables se disponen en uno de los ejes (por ejemplo. o ´ El ultimo ejemplo utiliza el m´ todo de coordenadas paralelas para an´ lisis exploratorio de e a datos multivariados. que son utiles independientemente del tipo de o e an´ lisis realizado. layout = c(3.Width Sepal. ´ Un ejemplo simple de analisis de varianza Existen tres funciones estad´sticas principales en el paquete base: lm. 1)) 5. data = iris. Mi meta en esta secci´ n es proporcionar una a ı o visi´ n muy general para que el lector se lleve una idea de las caracter´sticas de R para realizar o ı an´ lisis de todo tipo. y los valores observados se grafican en el otro eje (se estandarizan para hacerlas comparables). respectivamente. empezaremos con un e a ejemplo simple que requiere solamente el paquete base . Para introducir el m´ todo general de realizar an´ lisis de datos en R.Min setosa Petal. Tamo a bi´ n mencionaremos loglin para modelos log-lineales. a Con expeci´ n de las funciones en los paquetes grid y lattice. 1:4] | Species. modelos lineales generalizados y an´ lisis de varianza. a a 5. Algunos de estos paquetes vienen instalados junto con base. Posteriomente explicaremos algunos ´ conceptos como f´ rmulas y funciones gen´ ricas.Length Min Max Min Max Figura 12: La funci´ n parallel con los datos de “iris”. glm y aov para realiı zar regresi´ n lineal.1. todas la funciones que hemos viso to hasta ahora est´ n localizadas en el paquete base. se obtuvo la ı Fig.

43787 26. es similar al comando print(aov.spray). para un total de 72 observaciones.799 < 2.001 ‘**’ 0. o o 47 .spray) dividiremos la ventana gr´ fica en cuaa tro partes de tal manera que las cuatro gr´ ficas diagn´ sticas se dibujan en la misma ventana. Antes de escribir plot(aov.05798 Deg.aov(sqrt(count) ˜ spray.aov(sqrt(InsectSprays[. a o Los resultados del an´ lisis no se muestran ya que son asignados a un objeto llamado aov. of Freedom 5 66 Residual standard error: 0. Para ver como hacer an´ lisis de varianza o a tomemos unos datos que vienen incluidos con R: InsectSprays (insecticidas).spray Call: aov(formula = sqrt(count) ˜ spray. 1]) ˜ InsectSprays[.058 0.spray <.spray.438 17.6283453 Estimated effects may be unbalanced > summary(aov.05 ‘.spray) Df Sum Sq Mean Sq F value Pr(>F) spray 5 88.395 --Signif. La opci´ n ı o data = InsectSprays inidica que las variables deben ser buscadas en el marco de datos InsectSprays. Para ver una representaci´ n gr´ fica de los resultados podemos usar plot() o a o termplot().contingencia como argumento en vez de una f´ rmula18 .spray <. si conocemos el n´ mero de las columnas de las variables: e u > aov. 2]) la primera sintaxis es m´ s clara y se presta a menos confusi´ n. data = InsectSprays) Terms: spray Residuals Sum of Squares 88. Se probaron en el campo 6 diferentes tipos de insecticidas utilizando el n´ mero de insectos como la variable de u respuesta.01 ‘*’ 0.spray <. Cada insecticida se prob´ 12 veces.2e-16 *** Residuals 66 26. a Usaremos entonces otras funciones para extraer los resultados. No haremos aqui o una exploraci´ n gr´ fica de los datos. Despu´ s de cargar los datos en o e memoria con la funci´ n data. el an´ lisis se realiza con la funci´ n aov (despu´ s de transformar o a o e la respuesta): > data(InsectSprays) > aov. Los a o comandos son: 18 El paquete MASS tiene la funci´ n loglm que permite una interface de f´ rmula a loglin.’ 0. como por ejemplo print() para ver un resumen breve del an´ lisis (m´ s que todo los par´ metros) y summary() para ver m´ s a a a a detalles (incluyendo las pruebas estad´sticas): ı > aov.1 ‘ ’ 1 Recordemos que escribir el nombre del objeto como un comando.688 44. data = InsectSprays) El argumento principal (y obligado) de aov() es una f´ rmula que especifica la respueso ta en el lado izquierdo del s´mbolo ˜ y la variable explicativa en el lado derecho.aov(sqrt(InsectSprays$count) ˜ InsectSprays$spray) o tambi´ n. codes: 0 ‘***’ 0. sino que nos enfocaremos en un an´ lisis de varianza simple o a a de la variable de respuesta como funci´ n del insecticida usado. Esta sintaxis es equivalente a: > aov.

spray) par(opar) termplot(aov. partial.0 1.> > > > > opar <.2.5 1.04 0.5 3.5 2. 13 y la Fig.0 2.5 0. rug=TRUE) y los resultados se muestran en la Fig. 2)) plot(aov. o a o ´ 5.00 0. Residuals vs Fitted 1. Estos t´ rminos se representan con s´mbolos a e ı aritm´ ticos pero tienen un significado muy particular en R. se=TRUE.08 Cook’s distance 2 39 27 Cook’s distance plot 27 25 39 −2 0 25 −2 −1 0 1 2 0 20 40 60 Theoretical Quantiles Obs. Una f´ rmula se escribe t´picamente como y ˜modelo o ı donde y es la variable dependiente (o de respuesta) y modelo es un conjunto de t´ rminos para los e cuales es necesario estimar una serie de par´ metros. o a Partial for InsectSprays$spray −3 −2 −1 0 1 2 A B C D E F InsectSprays Figura 14: Representaci´ n gr´ fica de los resultados de la funci´ n aov usando termplot().par() par(mfcol = c(2. 14.resid=TRUE.5 0.5 3. number Figura 13: Representaci´ n gr´ fica de los resultados de aov usando plot().5 Fitted values Fitted values Standardized residuals Normal Q−Q plot 0.5 27 39 Standardized residuals Scale−Location plot 27 25 39 Residuals −1.0 25 1. e 48 . Formulas El uso de f´ rmulas es un elemento clave en an´ lisis estad´stico con R: la nomenclatura uilizada o a ı es la misma para (casi) todas las funciones.spray.

Hemos visto este concepto que la acci´ n de una funci´ n o a o o depende del tipo de objeto proporcionado como argumento.lm(y ˜ x) > df.a+b X a:b a*b poly(a. o Para an´ lisis de varianza. por ejemplo X[. ´ Funciones genericas Recordemos que las funciones de R act´ an con respecto a los atributos de los objetos pasados u como argumentos. ı e X[. suena obvio que la informaci´ n mostrada a o no ser´ la misma. a offset(3*x)) Vemos que los operadores aritm´ ticos en las f´ rmulas tienen significados muy diferentes a e o los que tendr´an en expresiones regulares. Si el objeto dado como argumento es de clase "lm" (modelo lineal) o ”aov" (an´ lisis de varianza). a Por ejemplo.. y ˜a + Error(b) significa los efectos aditivos de un t´ rmino fijo (a) y uno e aleatorio (b)..2:4]) efecto interactivo entre a y b efectos aditivos e interactivos entre a y b (id´ ntico a a+b+a:b) e polinomios de a hasta grado n incluye todas las itnteracciones hasta el nivel n.2]+.. La siguiente tabla muestra las principales funciones gen´ ricas que se pueden usar para extraer e informaci´ n de objetos resultantes de un an´ lisis. n) ˆn b %in % a a-b -1 1 offset(. Las funciones que usen posteo a riomente para extraer los resultados del an´ lisis actuar´ n espec´ficamente con respecto a la clase a a ı del objeto.3.. 5. a e 49 . usaremos la f´ rmula y ˜poly(x. algunas de las columnas se pueden seleccionar con ´ndices num´ ricos (por ej. Esta es una caracter´stica general de ı R19 . Para incluir operaciones aritm´ ticas en una f´ rmula se puede usar la funci´ n I(): la f´ rmula e o o o y˜I(x1+x2) define el modelo y = β(x1 + x2 ) + α.ncol(X)]. la funci´ n m´ s utilizada para extraer resultados de otros an´ lisis es summary o a a que muestra los resultados detallados de los mismos.. especifica un efecto aditivo para cada una de las columnas. en vez de (si el operador + tuviera su significado usual) y = β(x1 + x2 ) + α. a El objeto que contiene los resultados de un an´ lisis es generalmente una lista y su visualia zaci´ n est´ determinada por su clase..residual(mod) [1] 8 19 Existen m´ s de 100 funciones gen´ ricas en R. El uso t´pico de estas funciones es: o a ı > mod <. Estas funciones se denominan gen´ ricas.1]+X[. (a+b+c)ˆ2 es id´ ntico a a+b+c+a:b+a:c+b:c e los efectos de b est´ n anidados en a (id´ ntico a a+a:b o a/b) a e remueve el efecto de b.) efectos de a y b si X es una matriz..+X[. De manera similar. e Por ejemplo. por ejemplo: (a+b+c)ˆ2-a:b es id´ ntico a e a+b+c+a:c+b:c y˜x-1 regresi´ n a trav´ s del origen (igual para y˜x+0 o 0+y˜x) o e y˜1 ajusta un modelo sin efectos (solo el intercepto) agrega un efecto al modelo sin estimar los par´ metros (e. aov() accepta una sintaxis particular para definir efectos aleatorios. La ventaja de estas funciones gen´ ricas que su sintaxis es la misma para todos a e los an´ lisis en que se usen.g. 2) (y no y ˜x + xˆ2). para definir el modelo y = β1 x + β2 x2 + α. Los objetos resultantes de un an´ lisis poseen un atributo particular denominado a clase que contiene la “firma” de la funci´ n usada para el an´ lisis. Por ejemplo la f´ rmula y˜x1+x2 define el modelo ı o y = β1 x1 + β2 x2 + α. por ej.

. Esquem´ ticamente.spray$coefficients (Intercept) sprayB sprayC 3.spray)) NULL Las funciones gen´ ricas tambi´ n se denominan m´ todos.4 26.8 NA .5158217 sprayE sprayF -1.1159530 -2. en el caso de aov().values" "df.attr(*.foo.2579388 sprayD -1.$ Df : num [1:2] 5 66 . se construyen e e e a como method..attr(*. es simplemente una tabla e de pruebas: > str(summary(aov. En el caso de summary. donde foo es la funci´ n de an´ lisis.688 0. podemos ver o a las funciones que usan este m´ todo: e 50 . "class")= chr [1:2] "aov" "lm" Otra manera de ver esta estructura es visualizando los nombres del objeto: > names(aov.$ F value: num [1:2] 44.395 .frame’: 2 obs. of 5 variables: . "class")= chr [1:2] "summary. Si tomamos nuestro ejemplo con el an´ lisis de varianza de los datos a a en InsectSprays..$ Sum Sq : num [1:2] 88.residual" "call" "effects" "assign" "contrasts" "terms" Los elementos se pueden extraer como en cualquier otra lista: > aov.5963245 summary() tambi´ n crea una lista la cual.1 .$ Mean Sq: num [1:2] 17. podemos ver la estructura del objeto devuelto por aov(): > str(aov.$ Pr(>F) : num [1:2] 0 NA .residual coef residuals deviance fitted logLik AIC devuelve un corto res´ men u devuelve un res´ men detallado u devuelve el n´ mero de grados de libertad u devuelve los coeficientes estimados (algunas veces con sus errores est´ ndar) a devuelve los residuales devuelve la devianza devuelve los valores ajustados calcula el logaritmo de la verosimilitud y el n´ mero de par´ metros u a calcula el criterio de informaci´ n de Akaike o AIC (depende de logLik()) o Funciones como aov o lm devuelven una lista donde los diferentes elementos corresponden a los resultados del an´ lisis. max.level = -1) List of 13 .print summary df..aov" "listof" > names(summary(aov..9512174 0.spray)) List of 1 $ :Classes anova and ‘data.7606784 0.spray.spray) [1] "coefficients" [4] "rank" [7] "qr" [10] "xlevels" [13] "model" "residuals" "fitted.

dummy.listof" "print.aov" "summary.lm.values" [7] "qr" "df. summary().connection" "print. lm(). un an´ lisis de varianza: a > x <.hsearch" [25] "print.default" "print.null" "print.null" "summary.factor" [9] "summary.infl" "summary.htest" "print.frame" [13] "print.packageStatus" "summary.table" "summary.coef" [17] "print.lm(y ˜ x) > names(mod) [1] "coefficients" "residuals" [4] "rank" "fitted.connection" "summary.mtable" "print.unscaled" "effects" "assign" "xlevels" "model" "residuals" "df" "fstatistic" Los objetos devueltos por aov(). .y <.family" "print.logLik" [33] "print.ftable" "print.pairwise.data. son listas. son m´ todos e print de estos objetos (recuerde que escribir el nombre de un objeto como un comando equivale a usar print()): > apropos("ˆprint") [1] "print.glm" "summary.residual" [10] "call" "terms" > names(summary(mod)) [1] "call" "terms" [4] "coefficients" "sigma" [7] "r.noquote" 51 .null" "print.matrix" "summary.squared" "adj.htest" "print.coefmat" [11] "print.coef.lm" [31] "print.data.glm.infl" [27] "print.aovlist" "print.POSIXlt" Podemos ver la diferencia para este m´ todo comparando como act´ a en una regresi´ n lineal e u o vs.lm.manova" [15] "summary.factor" [19] "print.formula" [21] "print.libraryIQR" [29] "print.power.default" "summary.squared" [10] "cov.dummy.lm" [13] "summary.glm" [23] "print.density" [15] "print.atomic" [9] "print.by" "print.matrix" "print.> apropos("ˆsummary") [1] "summary" [3] "summary. .mlm" [17] "summary.POSIXct" [19] "summary.null" [11] "summary. .difftime" "print.integrate" "print. > mod <.glm.anova" "print.r.aov" [7] "print.aovlist" [5] "summary. De hecho. pero no se visualizan como las listas “comunes y corrientes” que hemos visto anteriormente.frame" [7] "summary.rnorm(5).list" "print.htest" [3] "print" [5] "print.

table" "print. add1 drop1 step anova predict update prueba sucesivamente todos los t´ rminos que se pueden adicionar a un modelo e prueba sucesivamente todos los t´ rminos que se pueden remover de un modelo e selecciona un modelo con AIC (llama a add1 y a drop1) calcula una tabla de an´ lisis de varianza o devianza de uno o varios modelos a calcula los valores predichos para datos nuevos de un modelo ya ajustado re-ajusta un modelo con una nueva f´ rmula o nuevos datos o Existen tambien varias funciones utilitarias que extraen informaci´ n de un objeto modelo o o f´ rmula.aov" "print.null" "print.table" "print.summary.summary.null" "print.POSIXlt" "print.recordedplot" "print.terms" "print.list" "print.socket" "print.ts" "print.SavedPlots" "print. pues llama a predict().simple.aov" "print.aovlist" "print.summary.octmode" "print. o termplot a a o ´ (ver el ejemplo anterior). La informaci´ n relativa a cada funci´ n se puede acceder o o como lo vimos anteriormente (p.glm" "print.summary.rle" "print.summary.summary. e 5.summary. Paquetes La siguiente tabla muestra los paquetes que se distribuyen con base.[35] [37] [39] [41] [43] [45] [47] [49] [51] [53] [55] [57] "print.packageStatus" "print.packageIQR" "print. 52 .4.xtabs" Todos estos m´ todos de print permiten cierta visualizaci´ n dependiendo del an´ lisis. para predict o update).summary. existen funciones gr´ ficas como plot que hacen gr´ ficos diagn´ sticos. o Finalmente. e o a La siguiente tabla muestra algunas funciones gen´ ricas que realizan an´ lisis suplementarios a e a ´ un objeto resultante de un an´ lisis.glm. Con excepci´ n de ctest o que se carga en memoria cuando R comienza.tables. donde el argumento principal es este ultimo.POSIXct" "print. aunque esta ultima no es estrictamente gen´ rica.lm. tal como alias() que encuentra los t´ rminos linealmente dependientes en un modelo o e lineal especificado por una f´ rmula. 7).lm" "print. pero en algunos a casos se necesitan argumentos adicionales (por ejemplo. cada paquete puede ser utilizado despu´ s de haber e sido cargado: > library(eda) La lista de las funciones disponibles en un paquete se puede ver escribiendo: > library(help=eda) o navegando la ayuda en formato html.manova" "print.ordered" "print.

el archivo 20 http://cran. Wilcoxon. (En Windows. . es recoo o mendado usar los paquetes pre-compilados disponibles en el sitio CRAN.html 53 .) Los o paquetes recomendados se describen brevemente en la siguiente tabla. Stata. covarianza espacial. Estos paquetes son distribuidos separademente. herramientas y datos de las librer´as de “Modern ı Applied Statistics with S-PLUS” por Venables & Ripley modelos aditivos generalizados modelos lineales y non-linear con efectos mixos redes neuronales y modelos multinomiales log-lineales particionamiento recursivo an´ lisis espaciales (“kriging”. ) m´ todos descritos en “Exploratory Data Analysis” por Tukey (solo ajuste lie neal robusto y ajuste de medianas) regresi´ n resistente y estimaci´ n de covarianza o o definici´ n de m´ todos y clases para objetos en R y herramientas de programao e ci´ n o regresi´ n moderna (alisamiento y regresi´ n local) o o an´ lisis multivariado a regresi´ n no-lineal o representaciones polin´ micas o funciones de distribuci´ n emp´ricas o ı funciones para hacer interfase desde R a elementos de interfase gr´ fica Tcl/Tk a herramientas para desarrollo y administraci´ n de paquetes o an´ lisis de series temporales a Muchos de los paquetes en la secci´ n contribuciones complementan la lista de m´ todos eso e tad´sticos disponibles en R. ) a an´ lisis de sobrevivencia a El procedimiento para instalar un paquete depende del sistema operativo y de la manera como ´ se instal´ R: desde el c´ digo fuente o archivos binarios pre-compilados. Muchos de estos paquetes son recomendados ya a que cubren m´ todos estad´sticos usualmente usados en an´ lisis de datos. los pae ı a quetes recomendados se distribuyen con la instalaci´ n base de R en el archivo SetupR. . Si es esta utlima.exe. . En Windows. . ‘Student’. Bartlett.r-project. Pearson. SPSS. . .org/src/contrib/PACKAGES. SAS. y deben ser instalados ı y cargados en R para su funcionamiento.Paquete ctest eda lqs methods modreg mva nls splines stepfun tcltk tools ts Descripci´ n o pruebas cl´ sicas (Fisher. Kolmogorova Smirnov. Epi Info) m´ todos para suavizaci´ n nuclear y estimaci´ n de densidad (incluyendo e o o n´ cleos bivariados) u contiene muchas funciones. Para ver una lista completa y descripci´ n de los paquetes o contribuidos visite la p´ gina web del CRAN20 . Minitab. Paquete boot class cluster foreign KernSmooth MASS mgcv nlme nnet rpart spatial survival Descripci´ n o m´ todos de remuestreo y “bootstraping” e m´ todos de clasificaci´ n e o m´ todos de agregaci´ n e o funciones para leer datos en diferentes formatos (S3.

si queremos instalar el paquete gee.gz’. Despu´ s es necesario escribir lo siguiente desde el sistema (no desde R): e R INSTALL gee_4.0 else y[i] <.1.exe tiene el men´ “Packages” que permite la instalaci´ n de paquetes directamente u o desde el disco duro o a trav´ s de internet desde la p´ gina web CRAN. Esto es com´ n a cualquier otro lenguaje de programaci´ n. Veremos ideas muy simples que son f´ ciles de impleo a mentar en la pr´ ctica. Como en otros lenguajes. Por ejemplo.packages(). u el usuario puede actualizar sus paquetes con las versiones m´ s recientes. primero es necesario bajar desde el internet el archivo gee 4. volvamos por un momento al su uso como lenguaje de programaci´ n.13-6. y para cada elemento de x con valor igual a b. Tambi´ n es bastante util escribir el siguiene te comando con cierta regularidad: > update. a 6. pero R u o posee caracter´sticas muy particulares que hacen posible programar sin mcuhos conocimientos o ı ´ experiencia previa en esta area. De esta manera.numeric(length(x)) for (i in 1:length(x)) if (x[i] == b) y[i] <.packages()... a 6.13-6. generalmente solo existe una versi´ n disponible u o o en CRAN). ´ ´ Programacion practica con R Ya que hemos echado un vistazo general a la funcionalidad de R. ´ CRAN.binario Rgui.. Supongamos que tenemos un vector x. } 54 . o sino asignarle 1. Primero creamos un vector y de la misma longitud de x: y <.tar.0 .tar. ´ Bucles y Vectorizacion Una ventaja de R comparado con otros programas estad´sticos con “menus y botones” es ı la posisbilidad de programar de una manera muy sencilla una serie de an´ lisis que se puedan a ejecutar de manera sucesiva.1 Se pueden usar corchetes para ejecutar varias instrucciones: for (i in 1:length(x)) { y[i] <. queremos asignar el valor 0 a otra variable y. } if (x[i] == b) { y[i] <.gz (el n´ mero 4.packages() o download.packages() esto chequea las versiones de los paquete instalados en el sistema y los compara con los disponibles en CRAN (este comando se puede llamar desde el men´ “Packages” en Windows).tar.0 .13-6 indica la versi´ n del paquete. e a Si R fue compilado localmente.. se puede instalar un paquete directamente desde el c´ digo o fuente el cual es distribuido normalmente como un archivo ‘. R posee estructuras de control que no son muy diferentes a las de un lenguaje de alto nivel como C.gz Existen varias funciones para manejar paquetes tales como installed.

2) X <. La vectorizaci´ n hace los bucles impl´citos en las expresiones y ya lo o o ı hemos visto en muchos casos.x + y Esta suma se hubiera podido escribir como un bucle. y . 2)) > lapply(forms. sd) x y 0. MARGIN indica si se van a usar las filas (1).rnorm(10.1) y <.1 Tambi´ n existen varias funciones del tipo “apply” que evitan el uso de bucles. Por ejemplo..1388071 La funci´ n lapply() act´ a sobre una lista: su sintaxis es similar a la de apply y devuelve o u una lista. como se hace en muchos otros lenguajes: > z <.). y) # las columnas de X mantienen los nombres "x" y "y" apply(X.x[i] + y[i] En este caso. 2.cbind(x. es necesario crear con anterioridad el vector z por la necesidad de indexar los elementos. volviendo al ejemplo anterior: o > y[x == b] <. Es f´ cil ver que este bucle expl´cito solo funciona si x y y son de la misma longitud: a ı es necesario alterar el programa si esto es falso. son posibles argumentos opcionales de FUN.. apply() e act´ a sobre las filas o columnas de una matriz.Otra posibilidad es ejecutar una instrucci´ n siempre y cuando se cumpla una cierta condici´ n: o o while (myfun > minimum) { .. las columnas (2).. lm) [[1]] Call: 55 . u .. FUN es una funci´ n (o un operador. MARGIN.975132 4. consideremos la suma de dos vectores: > z <. este tipo de bucles y estructuras se pueden evitar gracias a una caracter´stica ı clave en R: vectorizaci´ n. y ˜ poly(x. donde X es una matriz. else) se pueden evitar con el uso de indexaci´ n o l´ gica. 5..0755153 2. 2)).0 > y[x != b] <.. > forms <.932979 > apply(X. mean) x y -4. pero en este caso debe especificarse en o corchetes) a ser aplicada.list(y ˜ x. } Sin embargo.rnorm(10. Las ejecuciones condicionales (if . > > > > x <.numeric(length(x)) > for (i in 1:length(z)) z[i] <. 2. Veamos un ejemplo simple. mientras que la primera situaci´ n funcionar´ en o a todos los casos. -5. y su sintaxis es apply(X. FUN. or ambas (c(1.. 0.

M´ s a´ n. Primero. type="l") title("dunnock") # particiona la ventana grafica # lee los datos # agrega un titulo El carcater ‘#’ se usa para agregar comentarios al programa y R los ignora durante la ejecuci´ n. queremos hacer la misma gr´ fica para tres a especies diferentes de aves y los datos est´ n en tres archivos diferentes.read.read. data$V2.read. "dunnock") 56 . y despu´ s usar indexaci´ n para acceder a los e o diferentes valores.dat") plot(data$V1. 6. Escribiendo un programa en R T´picamente.table("Swal.dat") plot(data$V1. y devuelve los resultados en una manera m´ s a amigable.FUN(formula = X[[1]]) Coefficients: (Intercept) 31.2. 3. "wren". se pueden a u agrupar y ejecutar juntos cambiando algunos argumentos. y por lo tanto. layout(matrix(1:3. 1)) # particionar la ventana gr’afica species <. o El problema del primer programa es que se puede volver bastante largo si queremos agregar otras especies. 3. algunos comandos se ejecutan varias veces. hagamos nuestro programa de la manera m´ s intuitiva posible ejecutando sucesivaa mente los comandos necesarios. La estrategia que usamos aqui es poner estos argumentos en vectores de tipo caracter.6037 La funci´ n sapply() es una variaci´ n m´ s flexible de lapply() que puede tomar un o o a vector o una matriz como argumento principal.2181 poly(x. Un programa se usa t´picamente cuando uno quiere hacer una o varias opeo ı raciones muchas veces.683 x 5.377 [[2]] Call: FUN(formula = X[[2]]) Coefficients: (Intercept) poly(x. 2)2 -0.c("swallow". generalmente en una tabla. data$V2. layout(matrix(1:3. 1)) data <. data$V2.table("Wren.9330 1. En nuestro primer ejemplo. teniendo cuidado de particionar el dispositivo gr´ fico con antea rioridad.table("Dunn. type="l") title("wren") data <. 2)1 4.dat") plot(data$V1. type="l") title("swallow") data <. Procederemos paso a paso a y veremos diferentes maneras de programar este problema.R’. los programas en R se escriben en un archivo que se guarda en formato ASCII ı con terminaci´ n‘.

type="l") title(S) } Para que esta funci´ n pueda ser ejecutada. type="l") title(species[i]) # agregar un titulo } Note que el argumento file[i] no se pone entre comillas en read.table() ya que este argumento ya es de tipo caracter. Si deseamos a hacer esta operaci´ n en diferentes situaciones. tenemos ahora una tercera versi´ n de o nuestro programa: 57 .read. data$V2.3.dat") for(i in 1:length(species)) { data <. Creando sus propias funciones Hemos visto que la mayor parte del trabajo en R se realiza a trav´ s de funciones con sus e respectivos argumentos entre par´ ntesis. primero es necesario cargarla en memoria. data$V2.table(file[i]) # leer los datos plot(data$V1.dat". Una vez la funci´ n es cargada se puede ejecutar con un solo comando como por ejemplo. o 6. Es m´ s f´ cil agregar otras especies ya que a a a los nombres de las mismas est´ n en vectores al principio del programa.dat’ est´ n localizados en el directorio de trabajo de R. se puede cargar con source() como cualquier otro prograa ma. "Wren.file <. Por lo tanto. "Dunn. o ser copiada y pegada a un editor de texto. es necesario primero a cargarlo en memoria: > source("Mybirds. o mifun("swallow". R permite al usuario escribir sus propias funciones. puede ser una buena idea escribir una funci´ n: o o mifun <.dat").read. y esto se o puede hacer de varias maneras. Volvamos a nuestro ejemplo donde leemos unos datos y dibujamos una gr´ fica de los mismos. Si el usuario desea que su funci´ n sea cargada cada vez que comienza R.RData que ser´ cargae a do en memoria autom´ ticamente si se encuentra en el directorio de trabajo de R.R") Como en el ejemplo anterior esto solo funciona si el archivo Mybirds. F) { data <. de lo contrario es necesario especificar la direcci´ n completa.R se encuentra en el directorio de trabajo de R. Si el programa est´ en el archivo Mybirds.R. a es posible crear un paquete.dat").table(F) plot(data$V1. Las l´neas de la funci´ n se pueden escribir directamente desde el ı o teclado. Ahora nuestro programa es mucho m´ s compacto.function(S. Finalmente. eficiente y racional de R.c("Swal. como cualquier otro comando. a Escribir sus propias funciones permite un uso flexible. pero no discutiremos esta alternativa aqui (vea el manual “Writing R Extensions”). "Swal. se puede guardar en o un archivo especial llamado “espacio de trabajo” (del ingl´ s ‘workspace’) .dat" .Rprofile’ o ‘Rprofile’ (ver ?Startup para m´ s detalles). a Los programas anteriores funcionar´ n correctamente siempre y cuando los archivos de datos a ‘. y e estas tendr´ n las mismas propiedades de otras funciones. de lo contrario el usuario debe cambiar e el directorio de trabajo o especificar la direcci´ n completa en el programa (por ejemplo: file o <-”C:/data/Swal. Otra posibilidad a es configurar el archivo ‘. Si la funci´ n o est´ guardada en un archivo ASCII.

es decir el ambiente de foo2. y asi sucesivamente hasta llegar el ambiente global. Por ejemplo: o 58 . 3. "Wren. o > x <. arg3) {.function() { x <.dat") mifun("wren". R utiliza una regla llamada ambito o ´ lexicogr´ fico para decidir si un objeto es local a una funci´ n o global. Cuando una funci´ n es ejecutada. "wren". Otra rasgo importante de las funciones en R es la posibilidad de usar valores por defecto en la definici´ n. la posici´ n no o o tiene ninguna importancia si se utilizan los nombres de los argumentos. mifun. . z). "Dunn.1 > foo() [1] 1 ´ El nombre x no est´ definido dentro de foo()...dat") sapply(species. el valor de x en el ambiente o global (externo a la funci´ n) no cambia. . arg2. .2. Para entender mejor este a o mecanismos. arg1 = x). Si x es utilizado como el nombre de un objeto dentro de la funci´ n.dat". si los objetos correspondientes est´ n a colocados en la posici´ n correcta. Existen dos maneras de especificar argumentos a una funci´ n: por sus posiciones o por sus o nombres (tambi´ n llamados argumentos marcados). La palabra “circundante” utilizada arriba es importante. Por ejemplo. 1)) mifun("swallow". Sin embargo. se genera un mensaje de error y la ejecuci´ n se a o cancela). "Dunn.function(arg1. "Swal. file) En R. Si existen tres o m´ s ambientes anidados.dat") mifun("dunnock".dat" . asi que R buscar´ x dentro del ambito cira a cundante. arg2 = y. consideremos la siguiente funci´ n: o > foo <.c("swallow".dat") Tambi´ n podemos usar sapply() creando una cuarta versi´ n del programa: e o layout(matrix(1:3. . e imprimir´ su valor (de lo contrario. 3. la b´ squeda de objetos se hace progresivamente desde un a u ambiente dado al ambiente circundante a este. no es necesario declarar las variables usadas dentro de la funci´ n (a diferencia de otros o lenguajes como C o Fortran). "Wrenn. 1)) species <.} foo() se puede ejecutar sin isar los nombres arg1. foo(arg3 = z.layout(matrix(1:3.c("Swal. En nuestras dos funciones ejemplo existen dos ambientes: uno global y el otro local a cada una de las funciones foo o foo2.1 > foo2 <.function() print(x) > x <. consideremos una funci´ n con e o tres argumentos: foo <. "dunnock") file <. por ejemplo. print(x) } > foo2() [1] 2 > x [1] 1 Esta vez print() usa el objeto x definido dentro de su ambiente. por ejemplo: foo(x. y.

Todos estos manuales est´ n en ingl´ s: a a e “An Introduction to R” [R-intro. title("r = 3") 7. 2). hasta=tiempo) { N <.r-project.1.function(arg1. “R Data Import/Export” [R-data. La funci´ n abajo realiza este an´ lisis num´ rico del modelo de Ricker.function(nzero.org/doc/FAQ/R-FAQ.html. 3).pdf]. Agregaremos una opci´ n para permitirle a u o o ´ al usuario ver los resultados en los ultimos pasos de la simulaci´ n (por defecto todos los resultados o son graficados). arg3 = FALSE) {. hasta)) } Utilizemos la funci´ n para explorar las propiedades del modelo: o > > > > layout(matrix(1:3.nzero for (i in 1:tiempo) N[i+1] <.pdf]. . 1). “Writing R Extensions” [R-exts. tiempo=100. R trae varios manuales que se instalan por defecto en R HOME/doc/manual/ (donde R HOME donde R est´ instalado). . R tambi´ n viene con su propio FAQ (Preguntas m´ s frecuentes) localizadas en el directoe a rio R HOME/doc/html/. K=1. 5. title("r = 1") ricker(0. El objetivo es simular el modelo con respecto a la tasa de crecimiento a r y el n´ mero inicial de individuos en la poblaci´ n N0 (la capacidad de carga K es usualmente u o fijada en 1. El uso de valores por defecto en la definici´ n de una funci´ n es bastante util y resulta es o o una mayor flexibilidad.pdf]. texi. arg2 = 5. FALSE) producir´ n exactamente el mismo rea ´ sultado. r. html. title("r = 2") ricker(0. 59 . Otro ejemplo de la flexibilidad se ilustra con la siguiente funci´ n que simula el comportamieno to de una poblaci´ n bajo el modelo de Ricker: o Nt+1 = Nt exp r 1 − Nt K Este modelo es usado ampliamente en ecolog´a de poblaciones. y usaremos este como su valor por defecto). La versi´ n de este R-FAQ es actualizada regularmente en el sitio o CRAN: http://cran.1.numeric(tiempo+1) N[1] <. N.pdf].. Los archivos pueden estar en diferentes formatos (pdf. type="l".1. . ) dependiendo del tipo de instalaci´ n.foo <.. 3. “R Language Definition” [R-lang. los resultados se mostrar´ n como una a gr´ fica del n´ mero de individuos en funci´ n del tiempo. o FAQ.pdf].N[i]/K)) Tiempo <. desde=0. Literatura adicional sobre R Manuales. 1)) ricker(0.} Ambos comandos foo(x) y foo(x. particularmente en estudios ı demogr´ ficos de peces. xlim=c(desde.N[i]*exp(r*(1 . “R Installation and Administration” [R-admin. o a e ricker <.0:tiempo plot(Tiempo.

& Gentleman R. Kurt Hornik y Friedrich Leisch u n son los editores24 . u es importante proceder en el siguiente orden antes de enviar un mensaje a ‘r-help’: 1. El primer n´ mero fu´ puo o ı u e blicado en enero 2001.org/mail. recurı a sos bibliogr´ ficos y enlaces a otros sitios. 21 http://www.html.html 22 http://cran. a . lea cuidadosamente la ayuda en l´nea (puede ser usando la m´ quina de b´ squeda).r-project. Tambi´ n se puede encontrar aqui una lista de a e publicaciones (libros y art´culos) sobre R y m´ todos estad´sticos en general21 . ı a n direcciones de estos sitios se encuentran en http://cran.r-project. documentos y tutoriales escritos por usuarios de R Listas de correo.r-project.org/search. Muchos usuarios han enviado funciones y programas a ‘r-help’ los cuales pueden encontrarse en los archivos de la lista. y programadores). 3. La lista de discusi´ n general ‘r-help’ es una fuente interesante de informaci´ n para usuarios o o de R (las otras dos listas est´ n dedicadas a anuncios de nuevas versiones. 1996. Si se encuentra alg´ n problema con R. . La revista electr´ nica R News tiene como objetivo llenar un vac´o entre las listas de o ı discusi´ n electr´ nicas y publicaciones cient´ficas tradicionales.org/doc/Rnews/ 60 . mande un mensaje o lea o los archivos en http://www. . debe citar o o el art´culo original: ı Ihaka R. para suscribirse. Citando R en una publicaci´ n. nuevos paquetes. 23 Las Aqu´ se pueden encontrar dos manuales m´ s de R escritos en espa˜ ol.R-project. si usted menciona a R en una publicaci´ n.org/other-docs. ı a u lea las preguntas m´ s frecuentes (R-FAQ).html.Recursos en l´nea El sitio CRAN y la p´ gina web de R contienen varios documentos. Existen tres listas de discusi´ n en R.org/doc/bib/R-publications. Finalmente. y algunos ı e ı 22 . R: a language for data analysis and graphics. 2. y se producen tres n´ meros por a˜ o.R-project. Journal of Computational and Graphical Statistics 5: 299–314. .html 24 http://cran. a busque en los archivos de ‘r-help’ en la direcci´ n proporcionada anteriormente o usano do una de las m´ quinas de b´ squeda disponibles en algunas p´ ginas web23 . a u a R News.

Sign up to vote on this title
UsefulNot useful

Master Your Semester with Scribd & The New York Times

Special offer for students: Only $4.99/month.

Master Your Semester with a Special Offer from Scribd & The New York Times

Cancel anytime.