##################################################################### ##################################################################### ### ### Práctica num. 1. Introducción a R. ### 1 de Octubre de 2008 ### ### ABRIR R: Doble click EN EL ICONO DE R. ### CAMBIAR EL DIRECTORIO DE TRABAJO. R version 2.7.2 (2008-08-25) Copyright (C) 2008 The R Foundation for Statistical Computing ISBN 3-900051-07-0 R es un software libre y viene sin GARANTIA ALGUNA. Usted puede redistribuirlo bajo ciertas circunstancias. Escriba 'license()' o 'licence()' para detalles de distribucion. R es un proyecto colaborativo con muchos contribuyentes. Escriba 'contributors()' para obtener más información y 'citation()' para saber cómo citar R o paquetes de R en publicaciones. Escriba 'demo()' para demostraciones, 'help()' para el sistema on-line de ayuda, o 'help.start()' para abrir el sistema de ayuda HTML con su navegador. Escriba 'q()' para salir de R. # podemos introducir dígitos y evaluarlos libremente, como en cualquier otro programa de cálculo > 27 [1] 27 > 218373419274187241 [1] 2.183734e+17 # para hacer asignaciones y/o crear o definir variables (el = de matlab), utilizamos "<-" > n<-15 > n [1] 15 > 5->x > x [1] 5 # ¡¡ OJO !! Distingue mayúsculas de minúsculas > x<-1 > X<-10 > x;X # utilizamos el ";" para evaluar dos expresiones en la misma linea [1] 1 [1] 10 # además de elementos de tipo numérico, podemos crear otro tipo de variables, p.ej. tipo carácter (tb lógico, complejo, etc...) # En este caso, siempre tenemos que entrecomillar la definición de la variable > x1.char<-"soy guapo" > x1.char;x [1] "soy guapo" [1] 1 # podemos crear nuevas variables operando bien con números (utilizando paréntesis en el modo habitual) ... > n<-10+2;n [1] 12 > n<-(10+2)*5 > n [1] 60 # ... o bien podemos crearlas a partir de operaciones con otras variables ya existentes > m<-n+x;m [1] 61 # para la notación exponencial, utiliza e(.) > N<-1.23e6 > N [1] 1230000 # si queremos hacer una listado de las variables que tenemos creadas en el espacio de trabajo: "ls(.)" > ls() [1] "m" "n" "N" "x" "X" "x1.char" # para borrar variables: "rm(.)" > M<-m > M [1] 61 > rm(M) # generamos una nueva variable tipo caracter, que se llame "nombre" > nombre<-"Ester" > nom Error: objeto "nom" no encontrado > nombre [1] "Ester" # si queremos encontrar objetos con características específicas, tenemos que detallarlo en el comando ls(.). # p.ej. todas las variables que contengan "n" en su nombre. El patrón que buscamos es "n", y queremos que esté en cualquier parte > ls(patter=n,all=TRUE) character(0) > ls(patter="n",all=TRUE) [1] "n" "nombre" # Si queremos que el listado, además del nombre de las variables, recoja otras propiedades (valor, tipo, etc.), utilizamos: "ls.str(.)" > ls.str() m : num 61 n : num 60 N : num 1230000 nombre : chr "Ester" x : num 1 X : num 10 x1.char : chr "soy guapo" # Comandos para pedir ayuda de cualquier función: "?" ó "help" > ?ls > help(ls) > help("ls") # y si la función está en algún paquete o librería en la que no estamos trabajando: "help.search(.)" > ?survfit No documentation for 'survfit' in specified packages and libraries: you could try 'help.search("survfit")' > help.search("survfit") # para pedir ayuda en línea: "help.start(.)", que nos dirige al help on-line del paquete R > help.start() updating HTML package listing updating HTML search index If nothing happens, you should open 'C:\ARCHIV~1\R\R-27~1.2\doc\html\search\SearchEngine.html' yourself # si no tenemos muy claro qué función necesitamos utilizar, pero sabemos a qué famila pertenece, podemos hacer # una búsqueda que nos dé todas las funciones de la familia: "apropos(".")" ¡¡ SIEMPRE COMILLAS EN EL NOMBRE DE LA F(X)!! > apropos("fit") [1] "dffits" "fitted" "fitted.values" "glm.fit" [5] "glm.fit.null" "lm.fit" "lm.fit.null" "lm.wfit" [9] "lm.wfit.null" "lsfit" "qr.fitted" # Propiedades de las variables: name, value, attributes, mode, length # tipo numérico > x [1] 1 > mode(x) [1] "numeric" > ?mode > length(x) [1] 1 > ?length > str(x) num 1 > ?str # tipo lógico, que sólo toma valores TRUE ó FALSE (en mayúsculas) > valor.logico<-TRUE > mode(valor.logico) [1] "logical" > length(valor.logico) [1] 1 > str(valor.logico) logi TRUE # tipo carácter > nombre [1] "Ester" > mode(nombre) [1] "character" > length(nombre) [1] 1 > str(nombre) chr "Ester" # variables complejas > z<-3+5i > z [1] 3+5i > mode(z) [1] "complex" > length(z) [1] 1 > str(z) cplx 3+5i # elementos no disponibles (son de tipo LÓGICO) > not.available<-NA > not.available [1] NA > mode(not.available) [1] "logical" > length(not.available) [1] 1 > str(not.available) logi NA # vectores con NA en alguno de sus elementos > na.numero<-c(1,2,NA,4) > na.numero [1] 1 2 NA 4 > mode(na.numero) [1] "numeric" > length(na.numero) [1] 4 > str(na.numero) num [1:4] 1 2 NA 4 # podemos buscar el número de NA en un vector con la función: "na.fail(.)". Nos dará el núm de componentes del vector si no hay NA's, # o un mensaje de error si hay algún elemento NA > na.fail(na.numero) Error en na.fail.default(na.numero) : missing values in object > ?na.fail > str(na.numero) num [1:4] 1 2 NA 4 # como tratar el infinito "Inf" y la diff entre "NaN" e "Inf" > a<-256/0 > a [1] Inf > exp(a) [1] Inf > exp(-a) [1] 0 > a-a [1] NaN # para saber si un objeto es un vector > is.vector(x) [1] TRUE > ?is.vector > is.vector(na.numero) [1] TRUE # MANIPULACIÓN DE OBJETOS # VECTORES (cnjto de eltos del mismo modo) > x1<-c(5,1,8,3) # indexado de los índices de x1 según su orden > order(x1) [1] 2 4 1 3 # ordenamos crecientemente los valores de x1 > sort(x1) [1] 1 3 5 8 # qué posición ocupa cada componente al ordenarlos en sentido creciente > rank(x1) [1] 3 1 4 2 # lo mismo que "sort(x1)" > x1[order(x1)] [1] 1 3 5 8 > ?order # ejemplo en el que al hacer "rank" obtenemos la mediana > x2<-c(1,2,2,3,3,4) > x2 [1] 1 2 2 3 3 4 > rank(x2) [1] 1.0 2.5 2.5 4.5 4.5 6.0 # suma de vectores: sólo podemos hacerla cuando los dos vectores tengan longitudes proporcionales... > x1+x2 [1] 6 3 10 6 8 5 Warning message: In x1 + x2 : longitud de objeto mayor no es múltiplo de la longitud de uno menor > x3<-c(3,2,1) # y, si son proporcionales, se procede al reciclado de vectores (expansión del vector de menor longitud), # y se suman comp a comp > x2+x3 [1] 4 4 3 6 5 5 # para hacer referencia a un componente de un vector, utilizamos "[]" > x1[3] [1] 8 > x2[2] [1] 2 # y, con el signo negativo, "[-]" nos referimos a todos los componentes menos los indicados > x1[-4]+x2 [1] 6 3 10 8 4 12 > x1;x1[c(1,2)];x1[-c(1,4)] [1] 5 1 8 3 [1] 5 1 [1] 1 8 # queremos los componentes de x2 que cumplan una determianda condición > x2;x2[x2==3] [1] 1 2 2 3 3 4 [1] 3 3 # y, para esos componentes específicos, reasignamos > x2[x2==3]<-99;x2 [1] 1 2 2 99 99 4 # ARRAYS (objetos del mismo modo que se disponen en un cubo n-dimensional. Si cortásemos, # slices, tendríamos matrices) y MATRICES (arrays de 2 dimensiones) # generamos un array (unidimensional) de tamaño 5x4, con todos su elementos iguales a 9 > a1<-array(9,dim=c(5,4));a1 [,1] [,2] [,3] [,4] [1,] 9 9 9 9 [2,] 9 9 9 9 [3,] 9 9 9 9 [4,] 9 9 9 9 [5,] 9 9 9 9 > dim(a1) [1] 5 4 > mode(a1) [1] "numeric" > length(a1) [1] 20 # sus atributos > attributes(a1) $dim [1] 5 4 # generamos un nuevo array (tridimensional) de tamaño 5x4, con los elementos (x,z,nombre), # que se disponen en ese orden en columnas > a2<-array(c(x,z,nombre),dim=c(5,4,3));a2 , , 1 [,1] [,2] [,3] [,4] [1,] "1" "Ester" "3+5i" "1" [2,] "3+5i" "1" "Ester" "3+5i" [3,] "Ester" "3+5i" "1" "Ester" [4,] "1" "Ester" "3+5i" "1" [5,] "3+5i" "1" "Ester" "3+5i" , , 2 [,1] [,2] [,3] [,4] [1,] "Ester" "3+5i" "1" "Ester" [2,] "1" "Ester" "3+5i" "1" [3,] "3+5i" "1" "Ester" "3+5i" [4,] "Ester" "3+5i" "1" "Ester" [5,] "1" "Ester" "3+5i" "1" , , 3 [,1] [,2] [,3] [,4] [1,] "3+5i" "1" "Ester" "3+5i" [2,] "Ester" "3+5i" "1" "Ester" [3,] "1" "Ester" "3+5i" "1" [4,] "3+5i" "1" "Ester" "3+5i" [5,] "Ester" "3+5i" "1" "Ester" # ¿Cuál es el modo de los eltos del array? ¿el mismo? ¿cuál? # nótese que como en los rrays todos los objetos han de ser del mismo modo, cndo mezclamos, # todos se consideran tipo caracter y van entrecomillados > mode(a2) [1] "character" # segunda dimensión del array (segunda slice, q es una matrix 5x4) > a2[,,2] [,1] [,2] [,3] [,4] [1,] "Ester" "3+5i" "1" "Ester" [2,] "1" "Ester" "3+5i" "1" [3,] "3+5i" "1" "Ester" "3+5i" [4,] "Ester" "3+5i" "1" "Ester" [5,] "1" "Ester" "3+5i" "1" # Elemento (1,2) del array (nos da los de todas las slices del array, y los dispone en una fila) > a2[1,2,] [1] "Ester" "3+5i" "1" # Segunda columna de la tercera slice del array (dispuesto como una fila) ¡¡¡ POR DEFECTO, SP FILAS !!! > a2[,2,3] [1] "1" "3+5i" "Ester" "1" "3+5i" # Elemento (5,4) del 3º slice del array > a2[5,4,3] [1] "Ester" # reasignamos el elto (5,4) del 3º slice como NA > a2[5,4,3]<-NA;a2 , , 1 [,1] [,2] [,3] [,4] [1,] "1" "Ester" "3+5i" "1" [2,] "3+5i" "1" "Ester" "3+5i" [3,] "Ester" "3+5i" "1" "Ester" [4,] "1" "Ester" "3+5i" "1" [5,] "3+5i" "1" "Ester" "3+5i" , , 2 [,1] [,2] [,3] [,4] [1,] "Ester" "3+5i" "1" "Ester" [2,] "1" "Ester" "3+5i" "1" [3,] "3+5i" "1" "Ester" "3+5i" [4,] "Ester" "3+5i" "1" "Ester" [5,] "1" "Ester" "3+5i" "1" , , 3 [,1] [,2] [,3] [,4] [1,] "3+5i" "1" "Ester" "3+5i" [2,] "Ester" "3+5i" "1" "Ester" [3,] "1" "Ester" "3+5i" "1" [4,] "3+5i" "1" "Ester" "3+5i" [5,] "Ester" "3+5i" "1" NA # idem con la 4ª columna de todos los slices del array > a2[,4,]<-NA;a2 , , 1 [,1] [,2] [,3] [,4] [1,] "1" "Ester" "3+5i" NA [2,] "3+5i" "1" "Ester" NA [3,] "Ester" "3+5i" "1" NA [4,] "1" "Ester" "3+5i" NA [5,] "3+5i" "1" "Ester" NA , , 2 [,1] [,2] [,3] [,4] [1,] "Ester" "3+5i" "1" NA [2,] "1" "Ester" "3+5i" NA [3,] "3+5i" "1" "Ester" NA [4,] "Ester" "3+5i" "1" NA [5,] "1" "Ester" "3+5i" NA , , 3 [,1] [,2] [,3] [,4] [1,] "3+5i" "1" "Ester" NA [2,] "Ester" "3+5i" "1" NA [3,] "1" "Ester" "3+5i" NA [4,] "3+5i" "1" "Ester" NA [5,] "Ester" "3+5i" "1" NA # generamos una matriz con 5 filas, y 20 eltos, los núm que van del 1 al 20: matriz 5x4. # dipone los eltos por columnas, a no ser que le digamos lo contrario... (ver sgte ejemplo "byrow=TRUE") > m3<-matrix(1:20,nrow=5);m3 [,1] [,2] [,3] [,4] [1,] 1 6 11 16 [2,] 2 7 12 17 [3,] 3 8 13 18 [4,] 4 9 14 19 [5,] 5 10 15 20 # aquí ya los va disponiendo por filas y cndo se acaban los núm empieza otra vez con el 1 (reciclado) > m4<-matrix(1:33,nrow=5,byrow=TRUE);m4 Warning message: In matrix(1:33, nrow = 5, byrow = TRUE) : la longitud de los datos [33] no es un submúltiplo o múltiplo del número de filas [5] en la matriz [,1] [,2] [,3] [,4] [,5] [,6] [,7] [1,] 1 2 3 4 5 6 7 [2,] 8 9 10 11 12 13 14 [3,] 15 16 17 18 19 20 21 [4,] 22 23 24 25 26 27 28 [5,] 29 30 31 32 33 1 2 # genaramos un vector con 20 elementos > m5<-c(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19) > m5 [1] 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 # y para ponerlo en forma de matriz, es sfte con fijar "dim(.)<-c(NUMfilas,NUMcolumnas)" > dim(m5)<-c(5,4) > m5 [,1] [,2] [,3] [,4] [1,] 0 5 10 15 [2,] 1 6 11 16 [3,] 2 7 12 17 [4,] 3 8 13 18 [5,] 4 9 14 19 # primera fila de la matriz. Con "drop=FALSE" nos da los eltos como estén, en fila o en columna, pero... > m5[1,,drop=FALSE] [,1] [,2] [,3] [,4] [1,] 0 5 10 15 > m5[,2,drop=FALSE] [,1] [1,] 5 [2,] 6 [3,] 7 [4,] 8 [5,] 9 # con "drop=TRUE" siempre en fila > m5[,2,drop=TRUE] [1] 5 6 7 8 9 # Concatena matrices por columnas > cbind(m3,m5) [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [1,] 1 6 11 16 0 5 10 15 [2,] 2 7 12 17 1 6 11 16 [3,] 3 8 13 18 2 7 12 17 [4,] 4 9 14 19 3 8 13 18 [5,] 5 10 15 20 4 9 14 19 # Concatena matrices por filas > rbind(m3,m5) [,1] [,2] [,3] [,4] [1,] 1 6 11 16 [2,] 2 7 12 17 [3,] 3 8 13 18 [4,] 4 9 14 19 [5,] 5 10 15 20 [6,] 0 5 10 15 [7,] 1 6 11 16 [8,] 2 7 12 17 [9,] 3 8 13 18 [10,] 4 9 14 19 # Producto habitual de matrices > m3%*%t(m5) [,1] [,2] [,3] [,4] [,5] [1,] 380 414 448 482 516 [2,] 410 448 486 524 562 [3,] 440 482 524 566 608 [4,] 470 516 562 608 654 [5,] 500 550 600 650 700 # producto elto por elto (como el .* en matlab) > m3*m5 [,1] [,2] [,3] [,4] [1,] 0 30 110 240 [2,] 2 42 132 272 [3,] 6 56 156 306 [4,] 12 72 182 342 [5,] 20 90 210 380 # genera una matriz diag de dim 3 (Identidad 3x3) > diag(3) [,1] [,2] [,3] [1,] 1 0 0 [2,] 0 1 0 [3,] 0 0 1 # diag(matriz) nos da los eltos de la diag de la matriz, en un vector fila > diag(m3) [1] 1 7 13 19 > v<-c(10,20,30) > v [1] 10 20 30 # diag(vector), lo transforma en una mtriz diagonal, cuyos eltos de la diag son los del vector > diag(v) [,1] [,2] [,3] [1,] 10 0 0 [2,] 0 20 0 [3,] 0 0 30 # genera matriz 5x7, con 57 en su diag ppal > diag(57,5,7) [,1] [,2] [,3] [,4] [,5] [,6] [,7] [1,] 57 0 0 0 0 0 0 [2,] 0 57 0 0 0 0 0 [3,] 0 0 57 0 0 0 0 [4,] 0 0 0 57 0 0 0 [5,] 0 0 0 0 57 0 0 > m.cuad<-diag(3) > m.cuad [,1] [,2] [,3] [1,] 1 0 0 [2,] 0 1 0 [3,] 0 0 1 # resolución del sist lineal > solve(m.cuad) [,1] [,2] [,3] [1,] 1 0 0 [2,] 0 1 0 [3,] 0 0 1 # cálculo del determinante > det(m.cuad) [1] 1 # descomposición espectral > eigen(m.cuad) $values [1] 1 1 1 $vectors [,1] [,2] [,3] [1,] 0 0 1 [2,] 0 1 0 [3,] 1 0 0 # DATA FRAMES (colecciones de objetos de distinto modo pero igual longitud) # generamos un data frame, con 2 columnas, g1, g2, y las vbles especificadas > d1<-data.frame(g1=x2,g2=z);d1 g1 g2 1 1 3+5i 2 2 3+5i 3 2 3+5i 4 99 3+5i 5 99 3+5i 6 4 3+5i # añadimos una nueva columna, g3, al data frame. Será la variable x3 anterior > d1$g3<-x3;d1 g1 g2 g3 1 1 3+5i 3 2 2 3+5i 2 3 2 3+5i 1 4 99 3+5i 3 5 99 3+5i 2 6 4 3+5i 1 # nos da la columna g2 del data frame en forma de fila > d1$g2 [1] 3+5i 3+5i 3+5i 3+5i 3+5i 3+5i # nos da el elto 2 de la columna g1 > d1$g1[2] [1] 2 # nos da la primara columna del data frame (como columna) > d1[1] g1 1 1 2 2 3 2 4 99 5 99 6 4 # nos da la primera columna del data frame en fila ¡¡¡ ES COMO d1$g1 !!! > d1[[1]] [1] 1 2 2 99 99 4 # generamos nuevo data frame > d2<-data.frame(g1=x2,g2=z);d2 g1 g2 1 1 3+5i 2 2 3+5i 3 2 3+5i 4 99 3+5i 5 99 3+5i 6 4 3+5i # conactenamos nueva columna. ¡¡ ES COMO d2$edad<-x3 > d2<-cbind(d2,edad=x3);d2 g1 g2 edad 1 1 3+5i 3 2 2 3+5i 2 3 2 3+5i 1 4 99 3+5i 3 5 99 3+5i 2 6 4 3+5i 1 # FACTORES (conjunto de códigos pertenecientes a varias categorias que pueden o no llevar etiqueta) # generamos un factor sin etiquetas, con 3 niveles > f1<-factor(c(1,2,3));f1 [1] 1 2 3 Levels: 1 2 3 # segundo elto del factor > f1[2] [1] 2 Levels: 1 2 3 # factor con 3 niveles y 3 etiquetas > f2<-factor(c(1,2,3),labels=c("A","B","C"));f2 [1] A B C Levels: A B C > f3<-factor(c(1,2,3),labels=c("A","B","C")) # si concatenamos un factor, por columnas, con un nuevo vector, tenemos una matriz > f3<-cbind(f2,edad=x3);f3 f2 edad [1,] 1 3 [2,] 2 2 [3,] 3 1 # características de los factores f1,f2,f3 (para ver que f1,f2 son factores y f3 matriz) > str(f3) num [1:3, 1:2] 1 2 3 3 2 1 - attr(*, "dimnames")=List of 2 ..$ : NULL ..$ : chr [1:2] "f2" "edad" > str(f1) Factor w/ 3 levels "1","2","3": 1 2 3 > str(f2) Factor w/ 3 levels "A","B","C": 1 2 3 > is.matrix(f3) [1] TRUE # LISTAS (cnjtos de eltos de cualquier tipo) # lista con tres eltos > L1<-list(x1,x2,x3) > L1 [[1]] [1] 5 1 8 3 [[2]] [1] 1 2 2 99 99 4 [[3]] [1] 3 2 1 # primer elto de la lista (incluye la 'etiqueta') > L1[1] [[1]] [1] 5 1 8 3 # con doble corchete, ya sólo nos referimos al primer elto, no a la etiqueta. El objeto ya es un VECTOR > L1[[1]] [1] 5 1 8 3 # tercer comp del primer elto de la lista > L1[[1]][3] [1] 8 > names(L1) NULL # generamos nueva lista, esta vez con etiquetas y nombres > L2<-list(A=x1,B=x2,C=x3);L2 $A [1] 5 1 8 3 $B [1] 1 2 2 99 99 4 $C [1] 3 2 1 # primer elto (con etiqueta) > L1[1] [[1]] [1] 5 1 8 3 > L2[1] $A [1] 5 1 8 3 # primer elto (sin etiqueta): VECTOR > L2[[1]] [1] 5 1 8 3 > L2[[1]][3] [1] 8 > names(L2) [1] "A" "B" "C" # ¿es lo mismo que L2[[1]]? > L2$A [1] 5 1 8 3 > identical(L2$A,L2[1]) [1] FALSE > identical(L2$A,L2[[1]]) [1] TRUE # nueva lista con todas las vbles del espacio de trabajo > L3<-list(ls());L3 [[1]] [1] "a" "a1" "a2" "d1" [5] "d2" "f1" "f2" "f3" [9] "L1" "L2" "m" "m.cuad" [13] "m3" "m4" "m5" "n" [17] "N" "na.fail" "na.numero" "nombre" [21] "not.available" "v" "valor.logico" "x" [25] "X" "x1" "x1.char" "x2" [29] "x3" "z" # nueva lista con objetos diversos: variables, vectores, arrays, data frames > L4<-list(x1,x2,a1,a2,d1,nombre);L4 [[1]] [1] 5 1 8 3 [[2]] [1] 1 2 2 99 99 4 [[3]] [,1] [,2] [,3] [,4] [1,] 9 9 9 9 [2,] 9 9 9 9 [3,] 9 9 9 9 [4,] 9 9 9 9 [5,] 9 9 9 9 [[4]] , , 1 [,1] [,2] [,3] [,4] [1,] "1" "Ester" "3+5i" NA [2,] "3+5i" "1" "Ester" NA [3,] "Ester" "3+5i" "1" NA [4,] "1" "Ester" "3+5i" NA [5,] "3+5i" "1" "Ester" NA , , 2 [,1] [,2] [,3] [,4] [1,] "Ester" "3+5i" "1" NA [2,] "1" "Ester" "3+5i" NA [3,] "3+5i" "1" "Ester" NA [4,] "Ester" "3+5i" "1" NA [5,] "1" "Ester" "3+5i" NA , , 3 [,1] [,2] [,3] [,4] [1,] "3+5i" "1" "Ester" NA [2,] "Ester" "3+5i" "1" NA [3,] "1" "Ester" "3+5i" NA [4,] "3+5i" "1" "Ester" NA [5,] "Ester" "3+5i" "1" NA [[5]] g1 g2 g3 1 1 3+5i 3 2 2 3+5i 2 3 2 3+5i 1 4 99 3+5i 3 5 99 3+5i 2 6 4 3+5i 1 [[6]] [1] "Ester" # FUNCIONES # con "expression" generamos función, no evaluamos > e1=expression(x3/(x2+exp(z))) > e1 expression(x3/(x2 + exp(z))) # evaluamos la función, con los valores de las variables > eval(e1) [1] 0.04831980+0.13895675i 0.03578415+0.08953820i 0.01789207+0.04476910i [4] 0.02771600+0.00509873i 0.01847733+0.00339915i 0.02085446+0.04141966i # Derivamos una f(x) con respecto a una variable, pero siempre la vble entre "." > D(e1,z) Error en D(e1, z) : la variable debe ser un string de caracteres > D(e1,"z") -(x3 * exp(z)/(x2 + exp(z))^2) > D(e1,"x3") 1/(x2 + exp(z)) > D(e1,"x2") -(x3/(x2 + exp(z))^2) # GENERACIóN DE DATOS # generamos valore enteros de 1 al 50 con salto 1 > x<-1:50 > x [1] 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 [26] 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 # idem de -25 a 25 > x<--25:25;x [1] -25 -24 -23 -22 -21 -20 -19 -18 -17 -16 -15 -14 -13 -12 -11 -10 -9 -8 -7 [20] -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8 9 10 11 12 [39] 13 14 15 16 17 18 19 20 21 22 23 24 25 # análogo, pero en este caso no son números enteros > x<-0.33:68.15024 > x [1] 0.33 1.33 2.33 3.33 4.33 5.33 6.33 7.33 8.33 9.33 10.33 11.33 [13] 12.33 13.33 14.33 15.33 16.33 17.33 18.33 19.33 20.33 21.33 22.33 23.33 [25] 24.33 25.33 26.33 27.33 28.33 29.33 30.33 31.33 32.33 33.33 34.33 35.33 [37] 36.33 37.33 38.33 39.33 40.33 41.33 42.33 43.33 44.33 45.33 46.33 47.33 [49] 48.33 49.33 50.33 51.33 52.33 53.33 54.33 55.33 56.33 57.33 58.33 59.33 [61] 60.33 61.33 62.33 63.33 64.33 65.33 66.33 67.33 # generamos del 1 al 10, y a cada uno le restamos 2 > 1:10-2 [1] -1 0 1 2 3 4 5 6 7 8 # generamos del 1 al 8 > 1:(10-2) [1] 1 2 3 4 5 6 7 8 # generamos del 23 al 25 con salto 0.5 > seq(23,25,0.5) [1] 23.0 23.5 24.0 24.5 25.0 # generamos secuencia de 100 eltos desde a hasta b. El salto es: (a-b)/(length-1)=0.050808 > seq(length=100,from=-3e-2,to=5) [1] -0.03000000 0.02080808 0.07161616 0.12242424 0.17323232 0.22404040 [7] 0.27484848 0.32565657 0.37646465 0.42727273 0.47808081 0.52888889 [13] 0.57969697 0.63050505 0.68131313 0.73212121 0.78292929 0.83373737 [19] 0.88454545 0.93535354 0.98616162 1.03696970 1.08777778 1.13858586 [25] 1.18939394 1.24020202 1.29101010 1.34181818 1.39262626 1.44343434 [31] 1.49424242 1.54505051 1.59585859 1.64666667 1.69747475 1.74828283 [37] 1.79909091 1.84989899 1.90070707 1.95151515 2.00232323 2.05313131 [43] 2.10393939 2.15474747 2.20555556 2.25636364 2.30717172 2.35797980 [49] 2.40878788 2.45959596 2.51040404 2.56121212 2.61202020 2.66282828 [55] 2.71363636 2.76444444 2.81525253 2.86606061 2.91686869 2.96767677 [61] 3.01848485 3.06929293 3.12010101 3.17090909 3.22171717 3.27252525 [67] 3.32333333 3.37414141 3.42494949 3.47575758 3.52656566 3.57737374 [73] 3.62818182 3.67898990 3.72979798 3.78060606 3.83141414 3.88222222 [79] 3.93303030 3.98383838 4.03464646 4.08545455 4.13626263 4.18707071 [85] 4.23787879 4.28868687 4.33949495 4.39030303 4.44111111 4.49191919 [91] 4.54272727 4.59353535 4.64434343 4.69515152 4.74595960 4.79676768 [97] 4.84757576 4.89838384 4.94919192 5.00000000 # aquí no nos dan la longitud, sólo desde a hasta b, con salto c > seq(from=-3,by=0.025,to=1.86) [1] -3.000 -2.975 -2.950 -2.925 -2.900 -2.875 -2.850 -2.825 -2.800 -2.775 [11] -2.750 -2.725 -2.700 -2.675 -2.650 -2.625 -2.600 -2.575 -2.550 -2.525 [21] -2.500 -2.475 -2.450 -2.425 -2.400 -2.375 -2.350 -2.325 -2.300 -2.275 [31] -2.250 -2.225 -2.200 -2.175 -2.150 -2.125 -2.100 -2.075 -2.050 -2.025 [41] -2.000 -1.975 -1.950 -1.925 -1.900 -1.875 -1.850 -1.825 -1.800 -1.775 [51] -1.750 -1.725 -1.700 -1.675 -1.650 -1.625 -1.600 -1.575 -1.550 -1.525 [61] -1.500 -1.475 -1.450 -1.425 -1.400 -1.375 -1.350 -1.325 -1.300 -1.275 [71] -1.250 -1.225 -1.200 -1.175 -1.150 -1.125 -1.100 -1.075 -1.050 -1.025 [81] -1.000 -0.975 -0.950 -0.925 -0.900 -0.875 -0.850 -0.825 -0.800 -0.775 [91] -0.750 -0.725 -0.700 -0.675 -0.650 -0.625 -0.600 -0.575 -0.550 -0.525 [101] -0.500 -0.475 -0.450 -0.425 -0.400 -0.375 -0.350 -0.325 -0.300 -0.275 [111] -0.250 -0.225 -0.200 -0.175 -0.150 -0.125 -0.100 -0.075 -0.050 -0.025 [121] 0.000 0.025 0.050 0.075 0.100 0.125 0.150 0.175 0.200 0.225 [131] 0.250 0.275 0.300 0.325 0.350 0.375 0.400 0.425 0.450 0.475 [141] 0.500 0.525 0.550 0.575 0.600 0.625 0.650 0.675 0.700 0.725 [151] 0.750 0.775 0.800 0.825 0.850 0.875 0.900 0.925 0.950 0.975 [161] 1.000 1.025 1.050 1.075 1.100 1.125 1.150 1.175 1.200 1.225 [171] 1.250 1.275 1.300 1.325 1.350 1.375 1.400 1.425 1.450 1.475 [181] 1.500 1.525 1.550 1.575 1.600 1.625 1.650 1.675 1.700 1.725 [191] 1.750 1.775 1.800 1.825 1.850 # repetimos 18 30 veces > rep(18,30) [1] 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 [26] 18 18 18 18 18 > rep("hola",12) [1] "hola" "hola" "hola" "hola" "hola" "hola" "hola" "hola" "hola" "hola" [11] "hola" "hola" ¡¡¡ OJO, EN MATRICES, NO CONCATENA. LEE LOS ELTOS DE LA MATRIZ POR COLUMNAS, Y LOS DISPONE EN FILAS !!! > rep(m4,3);m4 [1] 1 8 15 22 29 2 9 16 23 30 3 10 17 24 31 4 11 18 25 32 5 12 19 26 33 [26] 6 13 20 27 1 7 14 21 28 2 1 8 15 22 29 2 9 16 23 30 3 10 17 24 31 [51] 4 11 18 25 32 5 12 19 26 33 6 13 20 27 1 7 14 21 28 2 1 8 15 22 29 [76] 2 9 16 23 30 3 10 17 24 31 4 11 18 25 32 5 12 19 26 33 6 13 20 27 1 [101] 7 14 21 28 2 [,1] [,2] [,3] [,4] [,5] [,6] [,7] [1,] 1 2 3 4 5 6 7 [2,] 8 9 10 11 12 13 14 [3,] 15 16 17 18 19 20 21 [4,] 22 23 24 25 26 27 28 [5,] 29 30 31 32 33 1 2 > rep(nombre,10) [1] "Ester" "Ester" "Ester" "Ester" "Ester" "Ester" "Ester" "Ester" "Ester" [10] "Ester" # Genera 1:4 1:5 c(1:4,1:5) > sequence(4:5) [1] 1 2 3 4 1 2 3 4 5 # genera 1:1 1:2 1:3 1:4 > sequence(1:4) [1] 1 1 2 1 2 3 1 2 3 4 # genera 1:7 1:3 1:5 > sequence(c(7,3,5)) [1] 1 2 3 4 5 6 7 1 2 3 1 2 3 4 5 # generamos factores "gl" con 4 niveles, y repetimos 5 veces cada nivel > gl(4,5) [1] 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 4 4 4 4 4 Levels: 1 2 3 4 # similar, pero fijando una longitud. Entonces, tenemos q repetir > gl(4,5,length=29) [1] 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 4 4 4 4 4 1 1 1 1 1 2 2 2 2 Levels: 1 2 3 4 # generamos un factor con dos niveles, 6 repeticiones, y dos etiquetas para los niveles > gl(2,6,label=c("macho","hembra")) [1] macho macho macho macho macho macho hembra hembra hembra hembra [11] hembra hembra Levels: macho hembra > gl(3,10) [1] 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 Levels: 1 2 3 > gl(3,1,length=30) [1] 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 Levels: 1 2 3 > f1;f2;c("macho","hembra") [1] 1 2 3 Levels: 1 2 3 [1] A B C Levels: A B C [1] "macho" "hembra" # expand.grid, contempla todas las posibles combinaciones de los factores especificados. Podemos # o no dar nombres a las columnas > expand.grid(g1=f1,g2=f2,sexo=c("macho","hembra")) g1 g2 sexo 1 1 A macho 2 2 A macho 3 3 A macho 4 1 B macho 5 2 B macho 6 3 B macho 7 1 C macho 8 2 C macho 9 3 C macho 10 1 A hembra 11 2 A hembra 12 3 A hembra 13 1 B hembra 14 2 B hembra 15 3 B hembra 16 1 C hembra 17 2 C hembra 18 3 C hembra # GENERACIÓN DE NÚMEROS ALEATORIOS DE DISTRIBUCIONES ESPECÍFICAS > n<-5 > rnorm(n,mean=0,sd=1) [1] 0.75327044 0.05052817 -0.27038569 -0.40255256 0.33787344 > rexp(n,rate=1) [1] 0.46549289 0.03078069 0.81739284 2.06982913 0.24548116 > rgamma(n,shape=1,scale=1) [1] 0.3525761 0.5889632 0.3799840 0.0749491 1.6118236 > rpois(n,lambda=0.5) [1] 2 0 1 0 0 # FUNCIONES ARITMÉTICAS SIMPLES > x1 [1] 5 1 8 3 > x2 [1] 1 2 2 99 99 4 > y<-x2[-c(5,6)] > y [1] 1 2 2 99 # suma los eltos > sum(x1) [1] 17 # producto de los eltos > prod(x1) [1] 120 > max(x1) [1] 8 > min(x1) [1] 1 # posición del máximo/mínimo > which.max(x1) [1] 3 > which.min(x1) [1] 2 # vector del [mín máx] > range(x1) [1] 1 8 > length(x1) [1] 4 > mean(x1) [1] 4.25 > median(x1) [1] 4 > var(x1) [1] 8.916667 > cov(x1,x1) [1] 8.916667 > cor(x1,x1) [1] 1 > var(x1,y) [1] -40.66667 > cor(x1,y) [1] -0.2798242 > cov(x1,y) [1] -40.66667 # Estadísticos más importantes de una variable : min, quantiles, máx > summary(x1) Min. 1st Qu. Median Mean 3rd Qu. Max. 1.00 2.50 4.00 4.25 5.75 8.00 >