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´ en estoy muy agradecido con los miembros del grupo nuclear de programadores de R por ´ nimo en la lista de discusi´ sus esfuerzos considerables en el desarrollo de R y su a on ‘rhelp’. 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

´ Indice
1. Pr´ ologo 2. Algunos conceptos antes de comenzar 2.1. C´ omo funciona R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2. Creaci´ on, listado y remoci´ on de objetos en memoria . . . . . . . . . . . . . . . . 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´ on de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.4.1. Secuencias regulares . . . . . . . . . . . . . . . . . . . . . . . 3.4.2. Secuencias aleatorias . . . . . . . . . . . . . . . . . . . . . . . 3.5. Manipulaci´ on de objetos . . . . . . . . . . . . . . . . . . . . . . . . . 3.5.1. Creaci´ on de objetos . . . . . . . . . . . . . . . . . . . . . . . . 3.5.2. Conversi´ on de objetos . . . . . . . . . . . . . . . . . . . . . . 3.5.3. Operadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.5.4. C´ omo acceder los valores de un objeto: el sistema de indexaci´ on 3.5.5. Accediendo a los valores de un objeto con nombres . . . . . . . 3.5.6. El editor de datos . . . . . . . . . . . . . . . . . . . . . . . . . 3.5.7. Funciones aritm´ eticas simples . . . . . . . . . . . . . . . . . . 3.5.8. C´ alculos con Matrices . . . . . . . . . . . . . . . . . . . . . . 4. Haciendo gr´ aficas en R 4.1. Manejo de gr´ aficos . . . . . . . . . . . . . . . 4.1.1. Abriendo m´ ultiples dispositivos gr´ aficos 4.1.2. Disposici´ on de una gr´ afica . . . . . . . 4.2. Funciones gr´ aficas . . . . . . . . . . . . . . . 4.3. Comandos de graficaci´ on de bajo nivel . . . . . 4.4. Par´ ametros gr´ aficos . . . . . . . . . . . . . . . 4.5. Un ejemplo pr´ actico . . . . . . . . . . . . . . . 4.6. Los paquetes grid y lattice . . . . . . . . . . . 5. An´ alisis estad´ ısticos con R 5.1. Un ejemplo simple de an´ alisis de varianza 5.2. F´ ormulas . . . . . . . . . . . . . . . . . 5.3. Funciones gen´ ericas . . . . . . . . . . . . 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´ on pr´ actica con R 6.1. Bucles y Vectorizaci´ on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.2. Escribiendo un programa en R . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.3. Creando sus propias funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . 7. Literatura adicional sobre R

2

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

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

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

m <.10. 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´ on en que asigna el objeto: > n > n [1] > 5 > n [1] > x > X > x [1] > X [1] <. su valor anterior es borrado despu´ es de la asignaci´ on (la modificaci´ on afecta solo objetos en memoria.´ listado y remocion ´ de objetos en memoria 2. La funci´ on ls simplemente lista los objetos en memoria: s´ olo se muestran los nombres de los mismos.10 + 2 12 <. en este caso el resultado ser´ a visible en la pantalla pero no ser´ a guardado en memoria: > (10 + 2) * 5 [1] 60 La asignaci´ on ser´ a omitida de los ejemplos si no es necesaria para la comprensi´ on del mismo.3 + rnorm(1) 2. se puede usar la opci´ on 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 ."Carmen".1 <.2. 16). n2 <.0.100. Note que se puede escribir una expresi´ on sin asignar su valor a un objeto. n1 <.15 15 -> n 5 <.208807 La funci´ on rnorm(1) genera un dato al azar muestrado de una distribuci´ on normal con media 0 y varianza 1 (p.5 > ls() [1] "m" "n1" "n2" "name" Note el uso del punto y coma para separar comandos diferentes en la misma l´ ınea. Si se quiere listar solo aquellos objetos que contengan un caracter en particular. Creacion. > name <.10 1 10 Si el objeto ya existe. El valor asignado de esta manera puede ser el resultado de una operaci´ on y/o de una funci´ on: > n > n [1] > n > n [1] <. no a los datos en el disco).

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

el tipo de objeto retornado por la funci´ on o el operador.help" "help. Otras secciones que pueden ´ til) o Autestar presentes son Note: (notas adicionales).all.5. Tambi´ en se pueden realizar b´ usquedas por palabra clave con la funci´ on help.Al llamar la ayuda.search" [4] "link. tal como el nombre del paquete donde se encuentra la funci´ on u operador. ´ til estudiar la secci´ Para aquellos que hasta ahora est´ an comenzando en R.search pero esto est´ a a´ un en estado experimental (versi´ on 1. se abre una ventana o p´ agina (esto depende del sistema operativo) con informaci´ on general sobre la funci´ on en la primera l´ ınea. try.0 de R).html. References: (bibliograf´ ıa que puede ser u hor(s): (nombre del autor o autores).start" 8 .all. Arguments: para una funci´ on. La opci´ on try.search("bs")’ > help("bs". Details: descripci´ on detallada. Examples: algunos ejemplos que generalmente pueden ser ejecutados sin abrir la ayuda con la funci´ on examples(). Usage: para una funci´ on. seguido de secciones con informaci´ on espec´ ıfica acerca de la misma. proporciona el nombre de la misma con todos sus argumentos y los posibles valores por defecto (opciones).start() Con esta ayuda en html es posible realizar b´ usquedas usando palabras clave. Value: si se aplica. para un operador describe su uso t´ ıpico. Description: descripci´ on breve. es muy u on Exam´ til leer cuidadosamente la secci´ ples:. la funci´ on help s´ olo busca en los paquetes que est´ an cargados en memoria.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´ es de Netscape) escriba el comando: > help. Despu´ es viene el t´ ıtulo. que por defecto tiene el valor FALSE (falso). La secci´ on See Also: contiene referencias en hipertexto a otras p´ aginas de ayuda.packages. La funci´ on apropos encuentra todas aquellas funciones cuyo nombre contiene la palabra dada como argumento para los paquetes cargados en memoria: > apropos(help) [1] "help" "help. describe en detalle cada uno de sus argumentos. Por defecto. See Also: otras p´ aginas de ayuda con funciones u operadores similares. permite buscar en 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. Tambi´ en es u on Arguments:.

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

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

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

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

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

5 3. donde x es el nombre del objeto (que puede ser un vector. Tambi´ en se puede usar: 14 . 5. el segundo el final y el tercero el incremento que se debe usar para generar la secuencia.5) [1] 1. si es ”d c ¸ ada ”es reemplazada por Una manera sencilla de escribir los contenidos de un objeto en un archivo es utilizando el comando write(x. file="data.5 5.0 1.1:30 El vector resultante x tiene 30 elementos. Para facilitar la transferencia de datos entre diferentes m´ aquinas se pueden utilizar la opci´ on ascii = TRUE . y append (l´ ogico) que agrega los datos al archivo sin borrar datos ya existentes (TRUE) o borra cualquier dato que existe en el archivo (FALSE. el objeto se muestra en la pantalla) si es TRUE anexa los datos al archivo sin borrar datos ya existentes en el mismo l´ ogico o num´ erico : si es TRUE variables de tipo caracter y factores se escriben entre . file= "xyz. Esta funci´ on tiene dos opciones: nc (o ncol) que define el n´ umero de columnas en el archivo (por defecto nc=1 si x es de tipo caracter. 3. nc=5 para otros tipos). por defecto) cada ”es reemplazada por \.4.0 2. por ejemplo de 1 hasta 30.0 donde el primer n´ umero indica el principio de la secuencia. 0. especifica la manera como se debe tratar las comillas dobles ”en variables tipo caracter: si es ”escape”(o ”e”.RData"). Los datos (denominados ahora como un workspace o “espacio de trabajo” en terminolog´ ıa de R) se pueden cargar en memoria m´ as tarde con el comando load("xyz. Para guardar un grupo de objetos de cualquier tipo se puede usar el comando save(x.1.image() es una manera corta del comando save(list=ls(all=TRUE). La funci´ on save.txt").RData"). z. se puede generar con: > x <. ´ de datos Generacion Secuencias regulares Una secuencia regular de n´ umeros enteros.4.RData") (guarda todos los objetos en memoria en el archivo . file=".RData).5 4.x file append quote sep eol na dec row. o un arreglo).5 2. una matrix.names qmethod el nombre del objeto a exportar el nombre del archivo (por defecto. 3. si es un vector num´ erico. El operador ‘:’ tiene prioridad sobre otros operadores aritm´ eticos en una expresi´ on: > 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´ on seq puede generar secuencias de n´ umeros reales: > seq(1.names col. y. este indica el n´ umero de las variables a ser es mostradas entre (en 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´ on l´ ogica que indica si los nombres de las l´ ıneas se escriben en el archivo identificaci´ on para los nombres de las columnas si es quote=TRUE.0 4.0 3. por defecto).

5 5. tambi´ en es posible introducir datos directamente desde el teclado usando la funci´ on scan sin opciones: > z <.0 3. label=c("Macho".5 4. Se pueden usar dos opciones: length para especificar el n´ umero de datos producidos. 4. y labels para especificar los nombres de los factores. 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´ on sequence crea una serie de secuencias de n´ umeros enteros donde cada secuencia termina en el n´ umero (o n´ umeros) especificado (s) como argumento (s): > sequence(4:5) [1] 1 2 3 4 1 2 3 4 5 > sequence(c(10.5 4. 4.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. 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 .0 1. 1.0 1.0 3.5 3. 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.0 2. to=5) [1] 1.0 1.0 4.5. 2.0 3.5.0 2. 2.5 2.0 3.0 4. 3.5 5.5 5.0 Si se quiere.5 5. n) donde k es el n´ umero de niveles (o clases). 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. 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. 3.0 4. y n es el n´ umero de r´ eplicas en cada nivel.0 2.5.5 3.0 4. 5) [1] 1. Ejemplos: > gl(3.5 2.5 4.0 10: Read 9 items > z [1] 1.0 La funci´ on rep crea un vector con elementos id´ enticos: > rep(1. "Hembra")) [1] Macho Macho Macho Macho Macho Macho [7] Hembra Hembra Hembra Hembra Hembra Hembra Levels: Macho Hembra > gl(2. 6. 5.0 1.0 2.5.5 2.> seq(length=9. from=1. 1.5 4.5 2.0 Tambi´ en se pueden escribir los valores directamente usando la funci´ on c: > c(1.scan() 1: 1. 2.5 3.5)) [1] 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 ´ til porque genera series regulares de factores. La funci´ on gl (generador de niveles) es muy u La funci´ on tiene la forma gl(k.

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

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

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

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

ts. frequency = 12. start = c(1959. . ts.eps = getOption("ts. 2)) Qtr1 Qtr2 Qtr3 Qtr4 1959 1 2 3 1960 4 5 6 7 1961 8 9 10 > ts(matrix(rpois(36. names) data start end frequency deltat un vector o una matriz el tiempo de la primera observaci´ on ya sea un n´ umero o un vector con dos enteros (ver ejemplo m´ as abajo) ´ ltima observaci´ el tiempo de la u on especificado de la misma manera que start el n´ umero de observaciones por unidad de tiempo la fracci´ on del periodo de muestreo entre observaciones sucesivas (ej. frequency=12) Series 1 Series 2 Series 3 Jan 1961 8 5 4 20 .NULL > names(L2) [1] "A" "B" Series de tiempo. un vector de tipo caracter con los nombres de las series individuales. Serie 2. La funci´ on ts crea un objeto de clase "ts" (serie de tiempo) a partir de un ´ nica) o una matriz (serie multivariada). . start = 1959) Time Series: Start = 1959 End = 1968 Frequency = 1 [1] 1 2 3 4 5 6 7 8 9 10 > ts(1:47. 1). por defecto es "ts" para una serie univariada. 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. 1/12 para datos mensuales). end = numeric(0). start = c(1959. y c("mts". Las opciones que caractevector (serie de tiempo u rizan un objeto de este tipo son: ts(data = NA. . start = 1. deltat = 1. 3). start=c(1961. unicamente se debe especificar o frequency o deltat tolerancia para la comparaci´ on de series.eps class names Algunos ejemplos de series de tiempo creadas con ts(): > ts(1:10. 5). Las frecuencias se consideran iguales si su diferencia es menor que ts. "ts") para una serie multivariada para una serie multivariada.eps"). por defecto los nombres de las columnas de data. frequency = 1. class. 12. o Serie 1. frequency = 4.eps clase que se debe asignar al objeto.

para incluir ecuaciones en gr´ aficos (p. Conversi´ on de objetos Para el lector debe ser obvio que las diferencias entre algunos tipos de objetos son peque˜ nas.5.5. Una expresi´ on se puede crear desde una variable de tipo caracter.2. entre otras cosas. este es evaluado por R y ´ til construir una expresi´ ejecutado si es v´ alido. "z") -x * exp(z)/(y + exp(z))ˆ2 3.3.algo. R (versi´ on 1. Generalmente. Por supuesto.expression(x / (y + exp(z))) > exp1 expression(x/(y + exp(z))) > eval(exp1) [1] 0. La siguiente tabla resume la situaci´ on para la conversi´ on de diferentes tipos. "y") -x/(y + exp(z))ˆ2 > D(exp1.1 > exp1 <.5749019 Las expresiones se pueden usar. z <. "x") 1/(y + exp(z)) > D(exp1. > x <. 21 . por ejemplo D() que calcula derivadas parciales: > D(exp1. por lo tanto debe ser relativamente f´ acil convertir el tipo de un objeto cambiando algunos de sus atributos. Tal conversi´ on se puede realizar usando una funci´ on as. Todos los comandos v´ alidos son expresiones.1) tiene en su paquete base.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´ on. En muchos casos. 77 funciones de este tipo. 34). asi que no ahondaremos mucho m´ as en este tema. El resultado de esta conversi´ on depende obviamente de los atributos del objeto convertido. Una expresi´ on es una serie de caracteres que hace sentido para R.2. Los objetos de clase expresi´ on juegan un papel fundamental en R. las conversiones siguen reglas muy intuitivas. Cuando se escribe un comando directamente en el teclado. y <. es u on sin evaluarla: esto es lo que la funci´ on expression hace. Algunas funciones utilizan expresiones como argumentos. es posible evaluar la expresi´ on posteriormente con eval().5.

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

en este caso los valores l´ ogicos son forzados a valores num´ ericos.Aritm´ eticos + * / ˆ %% %/ % adici´ on substracci´ on multiplicaci´ on divisi´ on potencia m´ odulo divisi´ on de enteros < > <= >= == != Operadores Comparativos menor que mayor que menor o igual que mayor o igual que igual diferente de L´ ogicos ! x x & y x && y x | y x || y xor(x. ). . O exclusivo Los operadores aritm´ eticos y comparativos act´ uan en dos elementos (x + y. Los operadores comparativos act´ uan sobre cada elemento de los dos objetos que se est´ an comparando (reciclando los valores de los m´ as peque˜ nos si es necesario). y) [1] TRUE 3. Para cambiar todos los valores de la la ie tercera columna. La comparaci´ on 0 <x se realiza primero y el valor retornado es comparado con 1 (TRUE o FALSE <1): en este caso.2 El no especificar la fila incluye a todas. La expresi´ on 0 <x <1 es v´ alida. . 3] <. mientras que los par´ entesis se usan para especificar los argumentos de una funci´ on: 23 . C´ omo acceder los valores de un objeto: el sistema de indexaci´ on El sistema de indexaci´ on es una manera eficiente y flexible de acceder selectivamente elementos de un objeto. k]. Si x es una matriz o un marco de datos el valor de ´ sima fila y la je ´ sima columna se accede con x[i. pero tambi´ en l´ ogico. Los operadores “Y” y “O” existen en dos formas: uno sencillo donde cada operador act´ ua sobre cada elemento del objeto y devuelve un n´ umero de valores l´ ogicos igual al n´ umero de comparaciones realizadas. Por ejemplo. 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 resultado esperado debido a que ambos operadores son del mismo tipo y se ejecutan sucesivamente de izquierda a derecha. O l´ ogico id.10.1:3 > x == y [1] TRUE TRUE TRUE > identical(x.1:3. Los operadores l´ ogicos pueden actuar sobre uno (!) o dos objetos de tipo l´ ogico. Es importante recordar que la indexaci´ on se realiza con corchetes rectangulares.4. x[. a <b). y <. . j]. . para acceder al tercer elemento de un vector x. y puede ser num´ erico o l´ ogico. y) NO l´ ogico Y l´ ogico id. 3]. simplemente se escribe x[3]. otro doble donde cada operador act´ ua solamente sobre el primer elemento del objeto. > x[. j. y pueden devolver uno (o varios) valores l´ ogicos. Los operadores comparativos pueden actuar sobre cualquier tipo devolviendo uno o varios valores l´ ogicos. Para comparar “totalmente” dos objetos es necesario usar la funci´ on identical: > x <. el valor l´ ogico es imp´ ıcitamente forzado a num´ erico (1 o 0 <1).5. Los operadores aritm´ eticos act´ uan sobre variables de tipo num´ erico o complejo. El sistema de indexaci´ on se puede generalizar f´ acilmente para matrices con m´ as de dos dimensiones (por ejemplo una matriz tridimensional: x[i. devolviendo un objeto del mismo tama˜ no.

el sistema de indexaci´ on utiliza los valores l´ ogicos devueltos por los operadores comparativos.> x(1) Error: couldn’t find function "x" La indexaci´ on se puede usar para suprimir una o mas filas o columnas. k].20 3 4 20 20 20 20 20 20 <. Esta es una manera muy compacta y poderosa de hacer indexaci´ on selectiva sin utilizar bucles. La indexaci´ on l´ ogica se puede usar con marcos de datos. j.list. la posibilidad de seleccionar los n´ umeros pares de un vector de enteros: > x <. Si este tercer objeto es un vector. matrices y otros arreglos. x[-1. el segundo si (TRUE). 24 . 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´ on en s al vector x el primer elemento no se selecciona (FALSE).list[[3]][i. 15).list[[3]] accede al tercer elemento de my.1:10 > x[x >= 5] > x [1] 1 2 > x[x == 1] > x [1] 25 2 <.list[[3]][i].c(FALSE. ] suprime la primera fila. etc. por ejemplo my. Por ejemplo.rpois(40. y x[-c(1. es posible acceder los valores de un elemento usando como ´ ındice una expresi´ on comparativa: > x <. con la dificultad adicional que las diferentes columnas del marco pueden ser de diferentes tipos.1:40 > s <. el tercero no (FALSE). Estos valores se pueden calcular con anterioridad y pueden ser reciclados si es necesario: > x <. 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. si es una matriz en tres dimensiones con my. y asi sucesivamente. sus valores pueden ser modificados con my. ] har´ a lo mismo con la primera y la quinceava filas. Para listas. matrices. El resultado puede ser indexado a su vez como se explic´ o anteriormente para vectores. etc.25 3 4 20 20 20 20 20 20 Un uso pr´ actico de la indexaci´ on l´ ogica es por ejemplo. Para vectores. es f´ acil acceder a diferentes elementos (que pueden ser de cualquier tipo) usando corchetes rectangulares dobles.

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

sin. max(x)) n´ umero de elementos en x promedio de los elementos de x mediana de los elementos de x varianza de los elementos de x (calculada en n − 1).> z [1] 2 4 4 6 > x <. acos. se calcula la matriz de varianza-covarianza matriz de correlaci´ on de x si es una matriz o un marco de datos (1 si x es un vector) covarianza entre x y y.1:2 > z <. . por lo tanto la operaci´ on fue realizada. atan. si x es una matriz o un marco de datos. o entre las columnas de x y y si son matrices o marcos de datos correlaci´ on lineal entre x y y. digamma. as´ ı como diversas funciones u´ tiles en estad´ ıstica. Si queremos agregar (o multiplicar) un mismo valor a todos los elementos de un vector: > x > a > z > z [1] <. y) cor(x. ). beta. . ). a excepci´ on de range() que retorna un vector de longitud 2. Las siguientes funciones pueden devolver vectores m´ as complejos: 26 . funciones especiales (gamma. tan. o la matriz de correlaci´ on si x y y son matrices 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´ aximo en el objeto x valor m´ ınimo en el objeto x devuelve el ´ ındice del elemento m´ aximo de x devuelve el ´ ındice del elemento m´ ınimo de x rango de x o c(min(x). log10.max(x) which. . exp. asin.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.10 <. y var(). . y) o cov(x. Se pueden encontrar todas las funciones matem´ aticas simples (log. cos. abs. . . cov().1:4 <. sum(x) prod(x) max(x) min(x) which. Algunas de estas funciones se detallan en la siguiente tabla.min(x) range(x) length(x) mean(x) median(x) var(x) o cov(x) cor(x) var(x.1:3 > y <.a * x 10 20 30 40 El n´ umero de funciones disponibles en R es demasiado grande para ser listado en este documento. sqrt. besselI. log2. y cor() que pueden devolver matrices.

. si se desea centrar solamente utilizar scale=FALSE...] 1 1 2 2 27 .. C´ alculos con Matrices R posee facilidades para manipular y hacer operaciones con matrices. base) scale(x) pmin(x.1] [.4] [1. El argumento de esta funci´ on debe ser una variable de tipo l´ ogico calcula el n´ umero de combinaciones de k eventos en n repeticiones = n!/[(n − k)!k!] 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. centra y reduce los datos.] 1 1 [2..) pmax(x. nr = 2.y. . y[i].1] [.. 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 2 [4. . para reducir solamente usar center=FALSE (por defecto center=TRUE.] 2 2 > cbind(m1. igual que el anterior pero para el m´ aximo 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´ aximo devuelve un vector de la misma longitud que x con los elementos de x que est´ an en y (NA si no) devuelve un vector de los ´ ındices de x si la operaci´ on es (TRUE) (en este ejemplo. la opci´ on select proporciona las variables que se mantienen (o se ignoran con -) remuestrea al azar y sin reemplazo size elementos en el vector x.) sample(x. si x es un marco de datos.. los valores de i para los cuales x[i] == a).3] [. .5.matrix(1.. m2) [. nc = 2) > rbind(m1. la opci´ on replace = TRUE permite remuestrear con reemplazo 3.omit(x) na. nr = 2..matrix(2.] 1 1 [3.2] [1. y) which(x == a) choose(n. t´ ıpicamente comparaciones: x$V1 <10). . scale=TRUE) un vector en el que el iavo elemento es el m´ ınimo de x[i]. k) na. n) rev(x) sort(x) rank(x) log(x. Las funciones rbind() y cbind() unen matrices con respecto a sus filas o columnas respectivamente: > m1 <. 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. nc = 2) > m2 <. devuelve un objeto similar pero suprimiendo elementos duplicados devuelve una tabla con el n´ umero de diferentes valores de x (t´ ıpicamente para enteros o factores) devuelve una selecci´ on de x con respecto al criterio (. m2) [.round(x.y.) cumsum(x) cumprod(x) cummin(x) cummax(x) match(x.fail(x) unique(x) table(x) subset(x.8..] 1 1 2 2 [2.

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

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

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

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

matrix(scan(). f2. widths=c(1. 2.show(5) 4 1 2 3 5 ´ 4.2) >layout(m. 2) >layout(m.y) dotplot(x) graficar los valores de x (en el eje y) ordenados en el eje x gr´ afico bivariado de x (en el eje x) y y (en el eje y) igual a plot() pero los puntos con coordenadas similares se dibujan como flores con el n´ umero de p´ etalos igual al n´ umero de puntos gr´ afico circular tipo ‘pie’ gr´ afico tipo ‘box-and-whiskers’ gr´ afico de los valores de x en una l´ ınea (como alternativa a boxplot() para peque˜ nos tama˜ nos de muestra) gr´ afico bivariado de x y y para cada valor o intervalo de valores de z si f1 y f2 son factores.plot (f1.show(4) 1 3 2 4 >m <. 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).matrix(0:3. 2 >m <. la segunda columna de y. Funciones graficas La tabla a continuaci´ on resume algunas de las funciones gr´ aficas en R. 2) >layout(m. 2. plot(x) plot(x. si x es un marco de datos. 1). la opci´ on fun permite escoger un estad´ ıstico de y (por defecto. widths=c(2. y) piechart(x) boxplot(x) stripplot(x) coplot(x˜y | z) interaction. hace un gr´ afico de puntos tipo Cleveland (gr´ aficos apilados fila por fila y columna por columna) 32 .show(3) 1 3 >m <. y) matplot(x. y) sunflowerplot(x. el promedio: fun=mean) gr´ afica bivariada de la primera columna de x vs. 2)) >layout. c(1. 5.2.show(2) 2 1 Finalmente.matrix(c(1. 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. la segunda columna de x vs. etc.2.2. 3).1. 1)) >layout. 3). heights=c(1.matrix(1:4. 3)) >layout. heights=c(3. la primera columna de y. c(1. los n´ umeros en la matriz pueden ser ceros dando la posibilidad de realizar arreglos complejos (o inclusive esot´ ericos).1).>m <.

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

. type="n"). y y2. superior e inferior est´ an dadas por x1. y. y) legend(x. x1. expression(. angle= 30.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).). names) agrega texto dado por text en el margen especificado por side (ver axis() m´ as ´ rea de graficado abajo). superior (3)... x2. o en ambos si code=3. y1. y. un uso t´ ıpico: plot(x..y1) igual al anterior pero con flechas desde (x0. y) despu´ es que el usuario a hecho click n veces en el gr´ afico con el rat´ on..expression. line=0.) agrega puntos (se puede usar la opci´ on type=) igual a la anterior pero con l´ ıneas agrega texto dado por labels en las coordenadas (x. y1. donde la funci´ on expression transforma su argumento en una ecuaci´ on matem´ atica. code=2) abline(a. expression(p == over(1. respectivamente dibuja un pol´ ıgono uniendo los puntos dados por x y y agrega la leyenda en el punto (x. y) lines(x.. y0. > text(x. line especifica la linea del a dibuja una l´ ınea desde el punto (x0. o derecha (4). .points(x. side=3. al punto (x1. y1..b) abline(h=y) abline(v=x) abline(lm.y). 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˜ nas l´ ıneas verticales devuelve las coordenadas (x.. y): R2 = 0. labels. y.expression(substitute(Rˆ2==r. . Note la posibilidad de agregar expresiones matem´ aticas en una gr´ afica con text(x. y. vect) rug(x) locator(n.y0) si code=2. type="n". .) identify(x. x2. por defecto no se dibuja nada (type="n") similar a locator() con la diferencia que imprime en la gr´ afica el valor de x (u opcionalmente de una leyenda especificada en la opci´ on labels=) m´ as cercano al punto donde se hizo click. y.y1) si ´ ngulo desde la base de la flecha code=1. as. y. list(r=Rsquared)))) se ver´ a en la gr´ afica en el punto con coordenadas (x..y0) hasta el punto (x1. derecha. Util para identificar puntos en la gr´ afica que est´ an asociados con nombres. y. y1) arrows(x0... .9856298 34 .)). x1.) segments(x0.. se pueden utilizar las funciones substitute y as. Por ejemplo.) mtext(text. legend) title() axis(side.obj) rect(x1. y) text(x. tambi´ en dibuja s´ ımbolos (type="p") o l´ ıneas (type="l") con respecto a par´ ametros gr´ aficos opcionales (. y): p= 1 1 + e−(βx+α) Para incluir una variable en una expresi´ on. por ejemplo para incluir el valor de R2 (calculado anteriomente y guardado en un objeto Rsquared): > text(x.obj (ver secci´ on 5) dibuja un rect´ angulo donde las esquinas izquierda. text(x. y2) polygon(x. y0. angle controla el a 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´ on dada por lm. 1+eˆ-(beta*x+alpha)))) se ver´ a en la gr´ afica como la siguiente ecuaci´ on en el punto de coordenadas (x. izquierda (2).

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

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

Se puede usar cualquier caracter (pch="*". ".0 x 0. . "?". ). bg=" yellow".5 1. y −1.". la segunda opci´ on tiene efecto solo sobre los s´ ımbolos 21– 25.5 −0. Los colores se obtuvieron con las opciones col="blue". 37 .5 0.0 Figura 3: La funci´ on plot usada sin opciones. . ." "X" "a" * ? X a Figura 2: Los s´ ımbolos gr´ aficos en R (pch=1:25).0 −0.5 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 "*" "?" ".

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´ on plot usada con opciones.

manera m´ as simple de cambiar un gr´ afico es a trav´ es de la adici´ on de opciones que permiten modificar 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´ ametro gr´ afico pch es utilizado como una opci´ on: pch=22 especifica un cuadrado con contorno y fondo de diferentes colores dados respectivamente por col and bg. La tabla de par´ ametros gr´ aficos explica el significado de las modificaciones hechas por bty, tcl, las and cex. Finalmente, adicionamos un t´ ıtulo con main. Los par´ ametros gr´ aficos y las funciones de graficaci´ on de bajo nivel nos permiten modificar a´ un m´ as la presentaci´ on de un gr´ afico. Como vimos anteriormente, algunos par´ ametros gr´ aficos no se pueden pasar como argumentos en funciones como plot. Modificaremos algunos de estos par´ ametros con par(), y por ende es necesario escribir varios comandos. Cuando se cambian ´ til guardar sus valores iniciales previamente para poder restaurarlos los par´ ametros gr´ aficos es u posteriormente. Aqui est´ an los comandos utilzados para obtener la Fig. 5. 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´ ametros gr´ aficos xaxs="i" y yaxs="i" (se pueden pasar como opciones a plot()).
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´ ametros gr´ aficos por defecto se copian en una lista llamada opar. Modificaremos tres par´ ametros: bg el color del fondo, col.axis el color de los n´ umeros en los ejes, y mar los tama˜ nos de los m´ argenes en los bordes del gr´ afico. La gr´ afica se dibuja de una manera muy similar a como se hizo la Fig. 4. ´ rea de graficado. las modificaciones de los m´ argenes permiten utilizar el espacio alrededor del a El t´ ıtulo se a˜ nade con la funci´ on de bajo nivel title lo que permite agregar algunos par´ ametros como argumentos sin alterar el resto de la gr´ afica. Finalmente, los par´ ametros gr´ aficos iniciales se ´ ltimo comando. restauran con el u Ahora, control total! En la Fig. 5, R todav´ ıa determina algunas cosas tales como el n´ umero ´ rea de graficado. Veremos ahora como de marcadores en los ejes, o el espacio entre el t´ ıtulo y el a controlar totalmente la presentaci´ on de la gr´ afica. La estrategia que vamos a usar aqui es dibujar primero una gr´ afica en blanco con plot(..., type="n"), y despues agregar puntos, ejes, etiquetas, etc., con funciones de graficaci´ on de bajo nivel. Incluiremos algunas novedades como ´ rea de graficado. Los comandos se encuentran a continuaci´ cambiar el color del a on y la gr´ afica 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´ afica “hecha a mano”.

Como se hizo anteriormente los par´ ametros gr´ aficos por defecto se guardan y el color del fondo y las m´ argenes se modifican. La gr´ afica se dibuja con type="n" para no colocar los puntos, xlab=“”,ylab=“” para no escribir t´ ıtulos en los ejes, y xaxt="n", yaxt="n" para ´ rea de graficado no dibujar los ejes. Esto resulta en que se dibuja solamente la caja alrededor del a y se definen los ejes con respecto a xlim y ylim. Note que hubi´ eramos podido usar la opci´ on axes=FALSE pero en ese caso, ni los ejes ni la caja hubieran sido dibujados. Los elementos se adicionan en la regi´ on de la gr´ afica con la ayuda de las funciones de bajo ´ nivel. Antes de agregar los puntos el color dentro del area de graficado se cambia con rect(): el ´ rea de tama˜ no del rect´ angulo se escoge de tal manera que es substanciamente m´ as grande que el 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´ on labels=FALSE especifica que no se deben escribir anotaciones con los marcadores. Esta opci´ on tambi´ en acepta un vector de tipo caracter, por ejemplo labels=c(‘‘A’’, ‘‘B’’, ‘‘C’’). El t´ ıtulo se adiciona con title(), pero el tipo de letra se cambia ligeramente. Las anotaciones en los ejes se escriben con mtext() (texto marginal). El primer argumento de esta funci´ on es un vector tipo caracter que proporciona el texto a ser escrito. La opci´ on line indica la distancia ´ rea de graficado (por defecto line=0), y at la coordenada. La segunda llamada a mtext() al a utiliza el valor por defecto de side (3). Las otras dos llamadas a mtext() pasan un vector num´ erico como el primer argumento: esto ser´ a convertido a un caracter. 4.6. Los paquetes grid y lattice

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

40

caracter. La f´ ormula y ˜x | z significa que la gr´ afica de y con respecto a x ser´ a dibujada como diferentes gr´ aficas con respecto a los valores de z. Este nuevo modo tiene su propio sistema de par´ ametros gr´ aficos muy distinto a lo que hemos visto hasta ahora. Nuestro ejemplo ser´ a ligeramente m´ as complicado con la superposici´ on en cada gr´ afico de las curvas de densidad emp´ ıricas con las curvas esperadas bajo una distribuci´ on normal. La siguiente tabla resume las funciones principales en lattice. n)) densityplot(˜ x | y. o factor pero debe tener por lo menos dos niveles gr´ aficos bivariados (con muchas funcionalidades) gr´ afico coloreado de los valores de z en las coordenadas dadas por x y y (x. 5) x <. en este u caso se crea una gr´ afica m´ ultiple con respecto a los valores de z. x debe ser num´ erico. pero todas estas funciones aceptan f´ ormulas condicionales ´ ltimo (y ˜x | z) como argumento principal. el paquete base. Estos gr´ aficos se pueden hacer simplemente con el comando densityplot(˜x) resultando en una curva con la funci´ on de densidad emp´ ırica donde los puntos corresponden a las observaciones en el eje x (similar a rug()).factor(rep(n.rnorm(sum(n)) y <. grid contiene todas las funciones necesarias para el modo gr´ afico. 16 plot() tambien acepta f´ ormulas como argumento principal: si x y y son dos vectores de la misma longitud. Estas u Veamos algunos ejemplos para ilustrar algunos aspectos de lattice. La f´ ormula proporcionada como argumento es la t´ ıpicamente utilizada. Sin embargo. y) resultan en gr´ aficas id´ enticas 15 Este 41 . es posible usar ambos modos gr´ aficos en la misma sesi´ on y en el mismo dispositivo gr´ afico. como se ver´ a en los ejemplos m´ as abajo. por ejemplo. el paquete debe ser cargado en memoria con el comando library(lattice) para poder acceder sus funciones. n). y puede ser num´ erico. y ˜x16 . mientras que lattice contiene las funciones m´ as com´ unmente usadas.Las gr´ aficas producidas por grid o lattice no se pueden combinar o mezclar con aquellas producidas por las funciones vistas anteriormente. 45.seq(5. . Desde un punto de vista pr´ actico. panel = function(x.. labels=paste("n =". 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´ afico tipo “box-and-whiskers” gr´ afico de funciones de densidad gr´ afico de puntos tipo Cleveland (gr´ aficos apilados l´ ınea por l´ ınea y columna por columna) histograma de las frecuencias de x cuartiles de x de acuerdo a los esperado con una distribui´ on te´ orica gr´ afico uni-dimensional. porque estos paquetes usan un novedoso modo gr´ afico15 . La mayor parte de las funciones en lattice toman una f´ ormula como argumento principal. y puede ser un factor cuartiles para comparar dos distribuciones. x debe ser num´ erico..) { modo gr´ afico remedia algunas de las debilidades del paquete base tal como falta de interactividad con las gr´ aficas. y y z deben ser de la misma longitud) matriz de gr´ aficos bivariados gr´ afico de coordenadas paralelas Algunas funciones en lattice tienen el mismo nombre que algunas de las funciones gr´ aficas en ´ ltimas se “esconden” cuando lattice es cargado en memoria. Empecemos con los gr´ aficos de funciones de densidad. Es necesario usar el argumento panel que define lo que se dibujar´ a en cada gr´ afica. Los comandos son: n <. Primero. plot(y ˜x) y plot(x.

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

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. type = c("p". data = quakes) El primer comando carga los datos de quakes en memoria.superpose para superponer los grupos en la misma gr´ afica. span=. panel = panel. Los comandos son: data(iris) xyplot( Petal. pch = 1). xyplot(lat ˜ long | depth. data = iris. pero esto 17 plot() no puede tomar argumentos tipo data.symbol"]]$col[1:3]. y utiliza varias opciones que veremos en detalle. Con los datos en iris. key = list(x=0. text = list(levels(iris$Species))) ) La llamada a la funci´ on xyplot es un poco m´ as compleja aqui que en los ejemplos anteriores. La opci´ on type.Width.85. y=0. la sobreposici´ on entre diferentes especies es lo suficientemente baja y permite diferenciar claramente entre ellas en la figura (Fig. Por ejemplo. define grupos que ser´ an usados por otras opciones. points=list(col=trellis. como su nombre lo sugiere.−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´ on xyplot con los datos en “quakes”.superpose. groups=Species. la localizaci´ on de las variables se debe especificar expl´ ıcitamente. especifica como representar los datos. La opci´ on key agrega una leyenda a la gr´ afica.15.get()[["superpose. se llama a la funci´ on xyplot con su f´ ormula apropiada y un 17 argumento data indicando donde se deben buscar las variables . la sintaxis es un poco complicada aqui. La opci´ on groups.cat. No pasamos opciones a panel. plot(quakes$long ˜quakes$lat).superpose. 9). Vimos anteriormente la opci´ on panel que define como se respresentar´ an los diferentes grupos en la gr´ afica: aqui usamos una funci´ on predefinida panel.75. Una vez definidas las variables. 43 .par.Length ˜ Petal. como en plot(). "smooth"). asi que se usar´ an los colores por defecto para distinguir los grupos. pero aqui se 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.

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

5 3 2 o ooo o o ooo o ooo o oo o ooo o o o oo o o o o o o o o o o oo oo ooo o oo oo o o oo ooo oo o o o oo oo oo oo o o ooo oo oo oo o o o o oo oo oo o oo o o ooo oo oo oo oo ooo o ooo o oo ooo 3 2 1 o o oo oo ooo oo oo oo ooo o oo oo ooo o o oo oo o o oooo o o oo o oo 7 8 Sepal.5 4 4.Setosa Versicolor Virginica o o o o o o oo o 2.5 o o o 4 o o o o o o o o o o o o o 3.5 o o oo o oo o o oo o o o o o o o o o o ooo o o o o o o o o o oo o o oo o Petal.Length 4 oo oo oo ooo o o o o o oo o o oo o o ooo o o oo ooo o o o o o o o o o o o o o oo o o o o o o ooo o oo o oo oo o o oo o o o oo ooo o o o o oo o o o o o ooo o o oo oo o o o o o o o o oo o o o o o o o o o o o o o o o oo o o o o o o o o o o o o o o o o o o o o o o oo oo o o o o oo o o o o oo o o o o o oo o o o o o o o oo oo ooo ooo oo oo o oo o o oo o oo 1 2 3 4 8 7 4.Width o o o o o oo oo ooo o o o oo o o o o o oooo o oo o o o o ooo o o 1 o o ooo ooo ooo o o o 0. 45 .5 o 2 2.5 o o oo o o o o oo o o o o o o oo o o o o o oo o o o oo oo o o o o o o o o oooo o o o oo o o oo o o o 2 o o oo o o oo o o o o o o o o o o o o o o o o o oo o o o o o ooo o o o o o ooooo o o oo o o o o o o o o o oo oo o o o o o o o oo o oo o o oo o o o oooo o 1.5 o o o o o o o o o o o Sepal. 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´ on splom con los datos de “iris” (2).Width o o o o o 3 o o 2.Length6 5 5 6 oo o o o o o o o o o o o o o o o o o o o o o o o oo oo o o o o o o oo 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 oo o o o oo o o o o o o o o o o o o o o o o oo oo oo o oo oo o o o oo oo o oo o oo 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 oo oo o o o o o o o o o o o o o o o oo o o o o o o o o o oo o oo o o o o o o oo o oo oo o o oo o o oo o o oo o oo oooo o oo ooo o oo oo o o oo o o o o o o o o o o o o o ooo o o oo o oo o o oooo o oo oo o o o o o o o oooo oo o o oo o o o o oo o o ooo ooo o o oo o o o o o o o o o o oo o o o o oo ooo oo ooo o o o oo oo o o ooo oo o oo o o o o oooo o o oo o oo o oo o ooo o o o o o oo oo o o o o o o o o Figura 10: La funci´ on splom con los datos de “iris” (1).5 o o o o o o 1.5 o o o o o o o o o o o o o o o o o o oo o o 0 0.5 2 2.5 1 oo o o oo o o o o o o oo oo oo ooooo o o o o o o o o o o o oo o ooo ooo o o o o 0 7 o ooo o oooo o 4 5 6 7 o ooo oo o o o o o o o o ooo 6 o o o o o oo o o oo oo o oo o o o o o o o o o o o o o o o oo o o o o o oo o oo oo oo oo oo o o oo o o o o oo oooo o o o oo o o 5 o o o o o o oo o o oo o o o oo ooo o oo o o oo o o o o o oo oooo oooo oo o ooo o o o o o o o o o o o o o o o o o oo o o o oo oooo o o 4 Petal.5 o 3.

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

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

> > > > > opar <. 14.0 1. Residuals vs Fitted 1.0 2.5 Fitted values Fitted values Standardized residuals Normal Q−Q plot 0.resid=TRUE.spray.0 25 1. Partial for InsectSprays$spray −3 −2 −1 0 1 2 A B C D E F InsectSprays Figura 14: Representaci´ on gr´ afica de los resultados de la funci´ on aov usando termplot().5 1. 13 y la Fig. Estos t´ erminos se representan con s´ ımbolos aritm´ eticos pero tienen un significado muy particular en R. rug=TRUE) y los resultados se muestran en la Fig. 2)) plot(aov. ´ 5. partial. se=TRUE.5 3.2.5 0.5 2.04 0. number Figura 13: Representaci´ on gr´ afica de los resultados de aov usando plot().5 0. Una f´ ormula se escribe t´ ıpicamente como y ˜modelo donde y es la variable dependiente (o de respuesta) y modelo es un conjunto de t´ erminos para los cuales es necesario estimar una serie de par´ ametros.par() par(mfcol = c(2.5 3. Formulas El uso de f´ ormulas es un elemento clave en an´ alisis estad´ ıstico con R: la nomenclatura uilizada es la misma para (casi) todas las funciones.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.spray) par(opar) termplot(aov. 48 .5 27 39 Standardized residuals Scale−Location plot 27 25 39 Residuals −1.00 0.

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

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

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

ts" "print.ordered" "print. existen funciones gr´ aficas como plot que hacen gr´ aficos diagn´ osticos.simple. para predict o update).table" "print.SavedPlots" "print.tables. 5.rle" "print.lm. La informaci´ on relativa a cada funci´ on se puede acceder como lo vimos anteriormente (p.aov" "print.packageIQR" "print.packageStatus" "print.list" "print.aovlist" "print.summary. pero en algunos un objeto resultante de un an´ alisis.summary. cada paquete puede ser utilizado despu´ es de haber 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. o termplot ´ ltima no es estrictamente gen´ (ver el ejemplo anterior).null" "print.summary.summary.[35] [37] [39] [41] [43] [45] [47] [49] [51] [53] [55] [57] "print.manova" "print. tal como alias() que encuentra los t´ erminos linealmente dependientes en un modelo lineal especificado por una f´ ormula.summary. aunque esta u erica.glm" "print. Con excepci´ on de ctest que se carga en memoria cuando R comienza.summary.summary. 7). Paquetes La siguiente tabla muestra los paquetes que se distribuyen con base.xtabs" Todos estos m´ etodos de print permiten cierta visualizaci´ on dependiendo del an´ alisis.POSIXct" "print. Finalmente.recordedplot" "print. add1 drop1 step anova predict update prueba sucesivamente todos los t´ erminos que se pueden adicionar a un modelo prueba sucesivamente todos los t´ erminos que se pueden remover de un modelo selecciona un modelo con AIC (llama a add1 y a drop1) calcula una tabla de an´ alisis de varianza o devianza de uno o varios modelos calcula los valores predichos para datos nuevos de un modelo ya ajustado re-ajusta un modelo con una nueva f´ ormula o nuevos datos Existen tambien varias funciones utilitarias que extraen informaci´ on de un objeto modelo o f´ ormula.4.POSIXlt" "print.aov" "print.socket" "print. 52 .null" "print. pues llama a predict().octmode" "print.table" "print.glm.terms" "print.summary. La siguiente tabla muestra algunas funciones gen´ ericas que realizan an´ alisis suplementarios a ´ ltimo. donde el argumento principal es este u casos se necesitan argumentos adicionales (por ejemplo.lm" "print.

(En Windows.) Los paquetes recomendados se describen brevemente en la siguiente tabla. . Paquete boot class cluster foreign KernSmooth MASS mgcv nlme nnet rpart spatial survival Descripci´ on m´ etodos de remuestreo y “bootstraping” m´ etodos de clasificaci´ on m´ etodos de agregaci´ on funciones para leer datos en diferentes formatos (S3. ) m´ etodos descritos en “Exploratory Data Analysis” por Tukey (solo ajuste lineal robusto y ajuste de medianas) regresi´ on resistente y estimaci´ on de covarianza definici´ on de m´ etodos y clases para objetos en R y herramientas de programaci´ on regresi´ on moderna (alisamiento y regresi´ on local) an´ alisis multivariado regresi´ on no-lineal representaciones polin´ omicas funciones de distribuci´ on emp´ ıricas funciones para hacer interfase desde R a elementos de interfase gr´ afica Tcl/Tk herramientas para desarrollo y administraci´ on de paquetes an´ alisis de series temporales Muchos de los paquetes en la secci´ on contribuciones complementan la lista de m´ etodos estad´ ısticos disponibles en R. y deben ser instalados y cargados en R para su funcionamiento. Minitab. los paquetes recomendados se distribuyen con la instalaci´ on base de R en el archivo SetupR. el archivo 20 http://cran. . Estos paquetes son distribuidos separademente. Pearson. es recose instal´ o R: desde el c´ odigo fuente o archivos binarios pre-compilados. . Bartlett. . ) an´ alisis de sobrevivencia El procedimiento para instalar un paquete depende del sistema operativo y de la manera como ´ tlima.exe. Wilcoxon.r-project. Muchos de estos paquetes son recomendados ya que cubren m´ etodos estad´ ısticos usualmente usados en an´ alisis de datos. En Windows.Paquete ctest eda lqs methods modreg mva nls splines stepfun tcltk tools ts Descripci´ on pruebas cl´ asicas (Fisher. Epi Info) m´ etodos para suavizaci´ on nuclear y estimaci´ on de densidad (incluyendo n´ ucleos bivariados) contiene muchas funciones. 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´ alisis espaciales (“kriging”. ‘Student’. covarianza espacial. .html 53 . Si es esta u mendado usar los paquetes pre-compilados disponibles en el sitio CRAN. Para ver una lista completa y descripci´ on de los paquetes contribuidos visite la p´ agina web del CRAN20 . . SAS.org/src/contrib/PACKAGES. KolmogorovSmirnov. SPSS. Stata.

0 .gz (el n´ umero 4. queremos asignar el valor 0 a otra variable y.numeric(length(x)) for (i in 1:length(x)) if (x[i] == b) y[i] <. 6.. generalmente solo existe una versi´ on disponible en CRAN).13-6. primero es necesario bajar desde el internet el archivo gee 4. Supongamos que tenemos un vector x. se puede instalar un paquete directamente desde el c´ odigo fuente el cual es distribuido normalmente como un archivo ‘.0 else y[i] <.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´ u “Packages” en Windows). 6. experiencia previa en esta a Como en otros lenguajes.gz’.tar.packages() o download. Tambi´ en es bastante u te comando con cierta regularidad: > update. pero R posee caracter´ ısticas muy particulares que hacen posible programar sin mcuhos conocimientos o ´ rea. ´ 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´ alisis que se puedan ejecutar de manera sucesiva..tar.1 Se pueden usar corchetes para ejecutar varias instrucciones: for (i in 1:length(x)) { y[i] <.13-6.13-6 indica la versi´ on del paquete. } 54 .1.exe tiene el men´ u “Packages” que permite la instalaci´ on de paquetes directamente desde el disco duro o a trav´ es de internet desde la p´ agina web CRAN..tar.packages(). si queremos instalar el paquete gee. R posee estructuras de control que no son muy diferentes a las de un lenguaje de alto nivel como C. o sino asignarle 1. volvamos por un momento al su uso como lenguaje de programaci´ on. Por ejemplo. Esto es com´ un a cualquier otro lenguaje de programaci´ on.gz Existen varias funciones para manejar paquetes tales como installed. De esta manera. } if (x[i] == b) { y[i] <. ´ practica ´ Programacion con R Ya que hemos echado un vistazo general a la funcionalidad de R. ´ til escribir el siguienCRAN.binario Rgui. Despu´ es es necesario escribir lo siguiente desde el sistema (no desde R): R INSTALL gee_4. Primero creamos un vector y de la misma longitud de x: y <. el usuario puede actualizar sus paquetes con las versiones m´ as recientes.packages(). Veremos ideas muy simples que son f´ aciles de implementar en la pr´ actica. y para cada elemento de x con valor igual a b.. Si R fue compilado localmente.0 .

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

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

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

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

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

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

Sign up to vote on this title
UsefulNot useful