Introducción a R. Buenos Aires, Oct 2011 GENOMICA UBA. Francisco García fgarcia@cipf.es http://bioinfo.cipf.es/fgarcia



Documentos relacionados
Proyecto de Innovación Docente: Guía multimedia para la elaboración de un modelo econométrico.

El programa Minitab: breve introducción a su funcionamiento. Para mostrar la facilidad con la que se pueden realizar los gráficos y cálculos

Capítulo 9. Archivos de sintaxis

Se podría entender como una matriz de filas y columnas. Cada combinación de fila y columna se denomina celda. Por ejemplo la celda A1, B33, Z68.

1. Introducción al programa R

Curso PHP Módulo 1 R-Luis

TEMA 7 ANÁLISIS DE DATOS: INTRODUCCIÓN AL SPSS

Instalación del programa PSPP y obtención de una distribución de frecuencias.

Estadística con Excel Informática 4º ESO ESTADÍSTICA CON EXCEL

Introducción al SPSS/PC. 1. El editor de datos. Taller de Estadística

Introducción a la Estadística con Excel

Operación de Microsoft Excel

Gráficos en R. µ ¹ ½ Agosto 2011 p. 1/17. Ibon Martínez.

PRACTICAS ORDENADOR. Programación Lineal con R

TEMA 5. INTRODUCCIÓN AL MANEJO DE ORIGIN 6.1

Introducción a MATLAB/ OCTAVE. Fundamentos Físicos de la Informática, 2006

ESCUELA SUPERIOR DE INFORMATICA Prácticas de Estadística UNA SESIÓN EN SPSS

MATLAB en 30 minutos

Introducción Comandos básicos en R. Introducción a R. Felipe Bravo Márquez. 13 de noviembre de 2013

Práctica 1: Introducción a R

ARREGLOS DEFINICION GENERAL DE ARREGLO

Sesión No. 4. Contextualización INFORMÁTICA 1. Nombre: Procesador de Texto

Creación de un Gráfico con OpenOffice.org Calc Presentación de los Datos Asistente para Gráficos

Análisis estadístico con Microsoft Excel

ESTRUCTURA DE DATOS: ARREGLOS

Introducción a Matlab.

Práctica 1ª: Introducción a Matlab. 1er curso de Ingeniería Industrial: Ingeniería de Control

Práctica 3: Funciones

La visualización de la ventana de Word tiene las siguientes partes:

Bases de datos en Excel

APLICACIONES INFORMÁTICAS de BASE de DATOS

Planilla de cálculo. Módulo II - OpenOffice.org Calc

INFORMÁTICA. Práctica 5. Programación en C. Grado en Ingeniería en Electrónica y Automática Industrial. Curso v1.0 (05.03.

UNIVERSIDAD DE PUERTO RICO

1 Empecemos Manipulación de vectores. Introducción a R

Instrucciones básicas de gretl

Modulo 1 El lenguaje Java

Curso. Análisis de datos con R.

TEMA 5: HOJAS DE CÁLCULO. Edición de hojas de cálculo con OpenOffice Calc

CAPÍTULO 2 INTERFASE VISUAL BASIC 6.0

PHP Perfect SQL v1.0 (SQL perfectas en PHP)

INTRODUCCIÓN AL MANEJO DEL SOFTWARE R

1. DML. Las subconsultas

FICHERO DE AYUDA DEL PROGRAMA MEGAPRIMI

Combinar correspondencia (I)

DOCUMENTOS COMPARTIDOS CON GOOGLE DOCS

MANUAL DE NAVEGACIÓN DEL SIIA-WEB versión PRONAD

Práctica 1: Introducción a MATLAB.

Introducción a la programación en R

Apuntes de ACCESS. Apuntes de Access. Campos de Búsqueda:

Instructivo de Microsoft Excel 2003

Contenidos. Archivos en C++ Archivos en C++ Introducción

Administración de portales Joomla (II)

Capítulo 4. Vectores y matrices. 4.1 Declaración de tablas. 4.2 Declaración estática de tablas

RClimTool MANUAL DEL USUARIO

Instructivo Applet en Geogebra grafica frecuencia relativa Lanzamiento de dos dados n veces

Econometría ADE Practica 1 PRÁCTICA 1 INTRODUCCIÓN AL GRETL

Presentaciones. Con el estudio de esta Unidad pretendemos alcanzar los siguientes objetivos:

Instalación del programa PSPP y obtención de una distribución de frecuencias.

La ventana de Microsoft Excel

Introducción. Universidad de Concepción, Chile Departamento de Geofísica Programación Científica con Software libre.

Guía de inicio rápido a

Estadística descriptiva con Excel (Cálculo de medidas)

!!!!!!!! !!!!! Práctica!4.! Programación!básica!en!C.! ! Grado!en!Ingeniería!!en!Electrónica!y!Automática!Industrial! ! Curso!2015H2016!

COMO CONFIGURAR UNA MAQUINA VIRTUAL EN VIRTUALBOX PARA ELASTIX

MACROS. Automatizar tareas a través del uso de las macros.

Instalación de R.

Definiciones. Tema 21_Módulos Menú 1

LAS BARRAS. La barra de acceso rápido

Cuando se escribe un documento, una de las cosas más importantes que puedes hacer es formatear el documento.

FICHERO DE AYUDA DEL PROGRAMA MEGAEURO

Academia técnica de computación A.T.C.

Tema 7: Programación con Matlab

En Excel podemos realizar cambios en formato dentro de las celdas desde la siguiente línea de comandos:

Ciudad de México, de abril de 2012

Preliminares. Tipos de variables y Expresiones

2. Seleccionar Insertar función:

MICROSOFT WORD 2007 AVANZADO. Unidad Didáctica Nº 1

TÉCNICAS DE GESTIÓN ADMINISTRATIVA PARA PEQUEÑAS EMPRESAS

Manual de usuario servidor de archivos para El Colegio de la Frontera Sur

Operación de Microsoft Word

Herramientas computacionales para la matemática MATLAB: Funciones definidas por el usuario (parte II)

Sistema Inteligente de Exploración

1. Visualización de datos con Octave

De cómo usar R en un tiempo razonable (no fácil, no)

3.4. Reload Editor ( Guía de Uso).

EXCEL. 13) El Excel es: a) Una base de datos b) Una hoja de cálculo c) Un sistema operativo d) Un programa de contabilidad

Utilizamos el fichero importado

GENERACIÓN DE TRANSFERENCIAS

INFORMÁTICA APLICADA A LA GESTIÓN COMERCIAL LECCIONES DE OFIMÁTICA BÁSICA: GUIA BÁSICA DE MS - POWER POINT

Uso del programa CALC

EXCEL FINANCIERO INTRODUCCION. Julio A. Sarmiento S. Julio A. Sarmiento S.

Principios y Herramientas de Programación

2. Fórmulas y funciones

Sección 4.1 Imágenes e ilustraciones

ARCHIVOS CON SERIES DEL BOLETÍN ESTADÍSTICO Manual de Usuario

INTRODUCCION A POWER POINT

Programación: QBASIC

Transcripción:

Introducción a R Buenos Aires, Oct 2011 GENOMICA UBA Francisco García fgarcia@cipf.es http://bioinfo.cipf.es/fgarcia Bioinformatics and Genomics Department Centro de Investigación Príncipe Felipe (CIPF) (Valencia, Spain)

Qué es R? R es un lenguaje y un entorno para computación estadística y de gráficos R se compone de un lenguaje y de paquetes de funciones precomputadas Es un lenguaje Orientado a Objetos. Sus elementos son objetos con propiedades y funciones de acceso. Se guarda en la memoria activa de R y son portables

Ventajas de R Gran facilidad para combinar paquetes existentes con código propio y con otros lenguajes de programación Alta calidad de gráficos. Potente en el manejo de matrices y texto Una comunidad de usuarios amplia, dinámica y con estadísticos de prestigio: Grandes repositorios de paquetes (para casi cualquier cosa) Proyectos desarrollados en disciplinas concretas (Bioconductor) Mucha ayuda en la red Contribuir y compartir!

Desventaja de R Funciona en la línea de comandos (?)

Bionconductor Es un proyecto R específico en el área de Bioinformatica: http://www.bioconductor.org Actualmente contiene más de 450 paquetes de análisis de datos genómicos y de anotación Una gran cantidad de nuevos desarrollos estadísticos en bioinformática se hacen como paquetes de R que se depositan en Bioconductor

Instalación de R Para instalar R hay que bajar un fichero ejecutable desde: http://www.r-project.org/ En esta página debemos clickar en download CRAN, escoger a continuación uno de los servidores (CRAN Mirrors) y después seguir los pasos según el sistema operativo. Windows: bajarse el ejecutable e instalar Linux: bajarse el tar.gz (R-2.6.0.tar.gz) y compilar Una vez instalado la distribución (y paquetes básicos) se pueden instalar paquetes adicionales > install.packages("masigpro", repos="http://www.bioconductor.org") > source("http://bioconductor.org/bioclite.r") > bioclite ()

Inicio de la sesión en R Tras la instalación, podemos ejecutar el programa clickando el icono de R o desde el menú de programas También podemos abrir una consola y escribiendo R comenzaremos con una sesión:

Documentación Manuales básicos que acompañan a R Introduction to R R language definition Writing R extensions R site: http://cran.r-project.org/ (Manuals -> Contributed) R para Principiantes, the Spanish version of R for Beginners, translated by Jorge A. Ahumada. A Spanish translation of An Introduction to R by Andrés González and Silvia González. Gráficos Estadísticos con R by Juan Carlos Correa and Nelfi González. Generacion automatica de reportes con R y LaTeX by Mario Alfonso Morales Rivera. Bioconductor site: http://www.bioconductor.org

Ayuda Ayuda dentro de R > help(function) # cada función tiene su página de ayuda > help(package= base ) # todas las funciones de un paquete > help.search( character ) # buscar ayuda sobre un concepto > apropos( character ) # fuzzy match >?lm > example(lm) # los ejemplos son muy útiles para entender las funciones

Ayuda (en la red) FAQ @ CRAN o Bioconductor http://cran.r-prject.org/faqs.html http://www.bioconductor.org/docs/faqs Mailing lists de R o de Bioconductor R-help@stat.math.ethz.ch bioconductor@stat.math.ethz.ch Archivos de la listas de correo (en los sites de R y Bioconductor) En Google: R help cuestión

Elementos básicos de R

Objetos en R Vector: sucesión de elementos del mismo tipo > a <- c(1,2,3) ; b <- c( uno, dos, tres ) > l <- c( FALSE, FALSE, TRUE ) Matriz: es una disposición ordenada de elementos del mismo tipo organizados en filas y columnas > A <- matrix(c(1,2,3,4,5,6), nrow = 2, ncol = 3) # matriz 2x3 R es case sensitive. A y a son dos objetos distintos Los nombres pueden cotener letras, números,., _, pero no empezar por número

Objetos en R Data frame: es una concatenación de vectores que pueden ser de distinto tipo. También en forma de array > X <- data.frame(nums = c(1,2,3,4), letts = c( uno, dos, tres, cuatro )) Lista: colección de elementos (eg. Un vector + 2 matrices) > Lis <- list (c(a, A, X)) Factor: Es un vector para datos categóricos. Identifica las clases distintas > Fact <- factor (c( uno, dos, uno, dos ))

Objetos en R Funciones realizan los trabajos estadísticos > CV <- function (x) { m <- mean(x) s <- sd(x) cv <- s/m return(cv) } Se pueden ver el código de cada función simplemente escribiéndola sobre la consola: > CV > sd

Creación y gestión de datos Asignación de valor a una variable: > vec <- c(1,4,6) > nam <- Mi variable > nam2 <- c( A, B, C ) > M <- matrix(c(1:6), nrow = 3, ncol = 2) > lista <- list(vec, nam, M) > cuadro <- data.frame(numeros = vec, Letras = nam2) Recuperar valor > nam > print(nam) # impresión dentro de funciones

Creación y gestión de datos Ver datos > ls() # lista variables en el espacio de trabajo > ls(pattern = m ) # lista variables que contienen m Propiedades de las variables > mode(vec) ; mode(nam) ; mode(m) ; mode(lista) ; mode(cuadro) > class(vec) ; class(nam) ; class(m) ; class(lista) ; mode(cuadro) > length(vec) ;length(nam) ; length(m) ;length(lista) ; length(cuadro) > dim(m) ; dim(vec) ; dim(nam) ; dim(lista) ; dim(cuadro) > attributes(m) ; attributes(nam) ; attributes(cuadro) > attr(m, names ) <- Nombre > names(cuadro) ; names(m)

Creación y gestión de datos Asignación de valor a una variable: > vec <- c(1,4,6) > nam <- Mi variable > nam2 <- c( A, B, C ) > M <- matrix(c(1:6), nrow = 3, ncol = 2) > lista <- list(vec, nam, M) > cuadro <- data.frame(numeros = vec, Letras = nam2) Recuperar valor > nam > print(nam) # impresión dentro de funciones

Operaciones básicas Operadores +, -, *, /, X^2, log2(x), log(x, base = 2), sqrt(x) Las operaciones se aplican a todos los elementos de un vector (o matriz) independientemente, reciclando si es necesario. > x <- c(1,2,3,4) # o equivalente x <- c(1:4) > x * 2 > y <- c(10, 20) > x * y > M * y # las operaciones se ejecutan column-wise

Operaciones lógicas Operadores ==, >=, <=,!= # comparación, &, xor(),, && # las dos últimas se usan en bucles is.na(), is.null(), is.matrix(),..., any(), all() # interrogación > a <- c( A, NA, C, D ) ; b <- c( A, C, C, F ) > a == b # la comparacion es elemento a elemento > is.na(a) > all(a == b) # interroga si todas las comparaciones son ciertas > any(a == b) # interroga si alguna de las comparaciones es ciertas

Crear funciones Intervalo de confianza para una media, varianza desconocida IC.1<-function(data,nivel) { alfa = 1-nivel m = mean(data) sd = sd(data) n = length(data) gl = n-1 t = qt(1-alfa/2,n-1) E = t*sd/sqrt(n) output <- c(m-e,m+e) output } # nivel:= nivel de confianza # media muestral # desviación típica muestral # tamaño muestral # grados de libertad # 1-alfa/2 cuantil de una T con n-1 g.d.l.

Leer y escribir datos > colegio <- read.table(file = colegio.txt, sep = \t, header = FALSE) # lee cualquier fichero > AFRICA <- read.delim(file = file.txt ) # lee un tab-delimited file library(foreign) #incluye read.spss > comercios <- read.spss * ( comercios.sav",to.data.frame =TRUE) # lee un spss library(gdata) #incluye read.excel > paises <- read.excel ** ( Paises.xls, sheet = 1) # lee un excel > write.table(cuadro, file = cuadro.txt, col.names = TRUE) # escribe > save(cuadro, file = cuadro.rdata ) # guarda en formato R > load( cuadro.rdata ) # carga fichero R > data(iris) # carga paquetes de datos disponibles

Generación de datos > a <- c(1:20) # crea un vector de 1 al 10 > b <- seq(1, 10, 0.5) # vector del 1 al 10, en intervalos de 0.5 > c <- sequence(c(5, 10)) # crea una secuencia hasta el numero(s) indicado(s) > d <- rep(c(1:3), 5) # repite el primer argumento las veces del segundo > e <- rep(c(1:3), each = 5) # repite elemento por elemento > gl(2, 4, length = 16, labels = c( FactorA, FactorB )) # genera series de factores > expand.grid(dosis = c( Alta, Baja ), Temp = ( 12h, 24h ), Edad = c(10, 20)) # crea data.frames con todas las combinaciones de los elementos dados

Generación de datos aleatorios rfunction (crea una muetra aleatoria de una distribucion dada) > rnorm(20, mean = 0, sd = 1) # 20 nums de una distribucion normal > runif(20, min = 0, max = 100)) # 20 nums entre 0 y 100 La función sample es usada en remuestreo > sample(c(1:15)) # toma una muestra de un vector SIN reemplazamiento > sample(c(1:15), replace = TRUE) # muestra CON reemplazamiento

Mirar los datos > data(iris) > head(iris) > tail(iris) > names(iris) # muestra los nombres de las variables de iris > class(iris) # es um data frame > attach(iris) # pone las variables de iris en el espacio de trabajo > iris[ Sepal.Length ] # proporciona los valores de la variable Sepal Length > iris[1] # lo mismo > iris$sepal.length # obtiene los valores de la variable > detach(iris) # quita las columnas de iris de la memoria

Algunas funciones elementales Estadística básica mean(), max(), min(), sd(), median(), summary > data <- runif(10, min = 2, max = 100) > mean(data) ; min(data) ; summary(data) Otras operaciones > sum(data) # suma todos los datos del vector > prod(data) # multiplica todos los elementos del vector > scale(data) # escala los datos (resta la media y divide por su sd)

Algunas funciones elementales Conjuntos union(), setdiff(), intersect(), setequal(), is.element(), match(), unique() > A <- c( B, A, C, D ) ; B <- c( A, C, E ) > union(a, B) ; intersect(a, B) ; setdiff(a, B) ; setdiff(b, A) ; setequal(a, B) > is.element(b, A) ; is.element(b, A) # busca los elementos de A en B > match(a, B); match(b,a) # da la posición de cada elemento de A en B > unique(c(a, B)) # da los elementos unicos Ordenación > order(a) # da el orden de los elementos de A > sort(a) # reordena los elementos de A

Manipulación básica de cadenas > A <- paste( Codigo, 1:3, sep = _ ) > grep( Codigo, A) # encuentra la expresión Codigo en A > sub( Codigo, Valor, A) # reemplaza expresiones > nchar(a) # calcula el numero de caracteres de A > strsplit(a, _ ) # separa caracteres por el separador indicado > substr(a, 7, 8) # coge la cadena que comienza en la posicion 7 hasta la 8

Indexar y seleccionar > A <- runif(20, 1, 100) # generar 10 números al azar > round(a, 2) # redondea da dos decimales (mirar?round) > A[10] # da el elemento en posicion 10 > A[A > 50] # da los elementos mayores de 50 > B <- A[1:10] # crea un nuevo objeto con los 50 primeros elementos de A > C <- A[11:20] > A[B > C] <- mayor # cambia al valor mayor todos aquellos elementos de A donde se cumple que cada valor de B es mayor que el correspondiente de C Los paréntesis se usan para indicar parámetros de función Los corchetes se usan para indicar condición del objeto

Indexar y seleccionar (ejemplo) > A <- rnorm(1000,200,10) # generar una distribución normal de media 200 > hist(a, breaks = 20) # hacemos el histograma > h <- hist(a, breaks = 20) # guardamos el histograma # Queremos insertar una línea vertical en el intervalo de más frecuencia H3K27me 3 > h # vemos que info tiene el objeto > max(h$counts) # el numero de counts mayor > h$counts == max(h$counts) # proporciona el elemento máximo > h$breaks[h$counts == max(h$counts)] # ofrece el break donde está el máximo > vert.line <- h$breaks[h$counts == max(h$counts)] # asignamos el valor > abline (v = vert.line, col = red ) # dibujamos la línea vertical

Matrices > M <- matrix(c(1:6), nrow = 3, ncol = 2) > M2 <- cbind(a = c(1,2,3), B = c(4,5,6), C = c(8,9,10)) # ver rbind > rownames(m2) <- c( primero, segundo, tercero ) # ver attributes(m2) > M2[,1] # da la primera columna > M2 [c(1:3),] # da las filas primera y tercera > M2[, A ] # da la columna de colnames A > M2[, A ] <- M2[, A ] *10 # hemos multiplicado la primera columna por 10 > t(m2) # transpuesta de una matriz > M2 * t(m2) # multiplica elemento a elemento > M2 %*% t(m2) # multiplicación matricial La función apply ejecuta una función sobre las filas o columnas de M > M <- matrix(runif(60,1,100), nrow = 10, ncol = 6) > medias.row <- apply(m,1,mean) > medias.col <- apply(m,2,mean)

Bucles Permiten hacer una función muchas veces incluyendo condicionantes > Nombres <- c( Ana, Juan, Maria, Susy, Pepe ) > Apellidos <- c( Pérez, Gomez, Fernández, García, Hernández ) > Genero <- c( M, V, M, M, V ) > for (i in 1:length(Nombres)) { if (Genero[i] == M ) { print (paste (Nombres[i], Apellidos[i]), sep= )) } else { print (paste (Apellidos[i], Nombre[i]), sep=, )) } } condición condición alternativa

Gráficos básicos de R

Gráficos La funcion básica es plot(). Incluye muchas modificaciones según el tipo de dato Una vez creado el gráfico se pueden añadir otros elementos: texto, líneas, leyendas par() controla los parámetros gráficos Layout,mfrow, screen.split controlan la apariencia de la pantalla El device gráfico puede ser la pantalla o un fichero (tipo pdf)

plot() > M <- matrix(runif(600,1,100), nrow = 100, ncol = 6) > M <- apply(m, 2,sort) > plot(m[,1], M[,2], main = Plot, type = l, xlab = eje x, ylab = eje y ) x y titulo tipo linea etiqueta eje x etiqueta eje y > a <- round (runif(24,1,100)) > points(m[a,3], M[a,4], cex = 0.5, col = green ) # dibuja puntos a un tamaño de 0.5 > abline(a = 1, b =1, col = red ) # diagonal en rojo > abline(h = 2, col = blue ) # linea horizontal a valor de y = 2 > lines (lowess(m [,2], M[,1]), col= brown ) # dibuja un suavizado de los datos > text(m[a,5], M[a,6], label = LETTERS[1:24]) # pone texto al plot > legend(100, 0, xjust = 1, yjust = 0, legend = c("black", "green"), pch = 19, posicion alineacion texto legenda simbolo col = c("black","green"), text.col = c("black","green"), bg = "gray90") # legenda color símbolo color texto color fondo

plot()

Gráficos exploratorios Preparamos los datos: > T1 = c(48.6,49.4,50.1,49.8,50.6, 50.8,47.1,52.5,49.0,46.7) > T2 = c(68.0,67.0,70.1,64.5,68.0,68.3,71.9,71.5,69.9,68.9,67.8,68.9) > T3 = c(67.5,62.5,64.2,62.5,63.9,64.8,62.3,61.4,67.4,65.4,63.2,61.2,60.5) > Mejoria = c(t1,t2,t3) # vector > Tratamiento = rep(1:3, c(10,12,13)) > Tratamiento = factor(tratamiento,labels = c("tratamiento I", "Tratamiento II", "Tratamiento III")) # factor > datos.ej1 = data.frame(mejoria,tratamiento) # data frame

Gráficos exploratorios Histograma >hist(t1, xlab = "% de mejoría", ylab = "Frecuencia", main = "") >title("histograma % de mejoría tratamiento I") Diagrama de Caja y Bigote >boxplot(mejoria ~ Tratamiento,xlab = "",ylab = "% Mejoría", col = "pink", las = 2, cex.lab = 0.7) Densidad >plot(density(t1), xlab = "% de mejoría", ylab = "Frecuencia", main = "") >title("densidad % de mejoría Tratamiento I") Diagrama de puntos >dotchart(mejoria,groups = Tratamiento, gcolor = c("red","blue","darkgreen"), main = "", cex = 0.7, xlab="% de mejoria )

Gráficos exploratorios

Gráficos exploratorios Diagramas de dispersión > M <- matrix(rnorm(600), 100, 6) > colnames(m) <- paste("variable", 1:6) > pairs(m)

par() par() lista los parámetros gráficos. Se puede cambiar directamente antes de hacer ningún gráfico. Algunos ejemplos: cex, cex.axis, cex.main etc, regulan el tamaño de las letras la dirección de la anotaciones de los ejes lty, lwd tipo y ancho de línea Cómo se usa > par(bg = yellow ) # fondo del plot amarillo > hist(t1, xlab = "% de mejoría", ylab = "Frecuencia", main = "") > par(bg = white ) >?par # para ver todas los parámetros gráficos que considera R

Gráficos múltiples por pantalla Varias posibilidades: par(mfrow = c(nfilas, ncolumnas)) es la forma más sencilla layout(matrix(elementos,nfilas,ncolumnas)) perimte indicar el orden de los elementos en la pantalla Ejemplos > par(mfrow = c(2,2)) > for(i in 1:4) plot(density(rnorm(100,1,i)), col = i, main = paste( Plot,i)) > layout(matrix(c(4:1),2,2)) > for(i in 1:4) plot(density(rnorm(100,1,i)), col = i, main = paste( Plot,i))

Dispositivos gráficos Normalmente se obtienen los gráficos por pantalla. La device gráfica por pantalla se designa por X11. Para generar una nueva: > hist(t1, xlab = "% de mejoria", ylab = "Frecuencia", main = "") > X11() > plot(density(t1), xlab = "%", ylab = "Frecuencia", main = "" También se pueden llevar los gráficos a un fichero (pdf, postscript ) > pdf( un_pdf.pdf ) # o similar postcript( un_ps.ps ) > plot(runif(10,1,100), runif(10,1,100)+100, main = Plot a pdf ) > dev.off() # cierra la ultima graphical device