################################################################################ ### TALLER FUNDAMENTOS DE R ### ### EJERCICIO 2.2: OPERADORES, PAQUETES Y "TASK VIEWS" ### ### ### ### Center for Conservation and Sustainable Development ### ### Missouri Botanical Garden ### ### Sitio en la red: rbasicsworkshop.weebly.com ### ################################################################################ ## OBJETIVO: ## El objetivo de este ejercicio es practicar los conceptos de "función", ## "argumento" y "operador", así­ como practicar con operadores y paquetes. 2 + 3 # El código anterior suma 2 y 3. Note el uso del operador matemático '+'. ## TAREA 1: Use los otros operadores algebraicos básicos: '-', '*', '/' y '^' ## para restar, multiplicar, etc. los valores 2 y 3. sum(2, 3) # El código anterior también suma 2 y 3, note aquí el uso de la función "sum". Sum(2, 3) # El comando anterior le debe dar un error. Esto se debe a que R distingue # minúsculas de mayúsculas; En consecuencia, la función *sum* no es lo mismo # que *Sum*, *Sum* no existe. 10-2/8 # El código anterior divide 2 entre 8, y luego resta el valor de 10. R sigue el # estándar de hacer la división y multiplicación antes de la suma o resta (esta # es la precedencia de operadores). (10-2)/8 # Utilizando paréntesis se puede especificar el orden en el que las operaciones # se realizan. Las operaciones dentro de paréntesis se realizan antes de las # operaciones fuera de paréntesis. En este caso, la sustracción se realiza antes # de la división. ## TAREA 2: ¿Cuál es el resultado de multiplicar 5.6 por 11.7, luego dividir ese ## valor por 3, y sumar 6.6 a ese resultado y finalmente elevar todo al cuadrado? ## Escriba esta operación en una de una sola línea de código. ## TAREA 3: ¿Cuál es el resultado de multiplicar 5.6 por 11.7, luego dividir ese ## valor por 3, y finalmente sumar 6.6 al cuadrado? ## Escriba esta operación en una de una sola línea de código. c("Inga", "punctata") # El código anterior concatena los caracteres (palabras) "Inga" y "punctata" # y formar un vector ## TAREA 4: Utilice la función "length" para confirmar la longitud del vector ## creado en el código anterior paste("Inga", "punctata") # El código anterior pega las palabras "Inga" y "punctata" para formar una sola cadena # de caracteres con dos palabras (longitud = 1). ## TAREA 5: Utilice la función "length" para confirmar la longitud del vector creado ## en el código anterior length(paste("Inga", "punctata")) ## TAREA 6: Utilice la función *paste* para unir el nombre de su especie favorita ## con el respectivo nombre del género y la familia correspondiente. ?paste # Abre la ayuda de la función *paste*. ## TAREA 7: Use la ayuda para esta función, identifique cuál es el papel del ## argumento de *sep*. ## TAREA 8: ¿Tiene este argumento (*sep*) un valor predeterminado? ¿Cuál es ese valor? ## TAREA 9: Use *paste* para unir el nombre del género y de la especie de su especie ## favorita utilizando el carácter '_' para separar las dos palabras. ?rep # Abre la ayuda para la función "rep". ## TAREA 10: Lea la ayuda de esta función, e identifique sus principales ## argumentos. ## TAREA 11: Ejecute las líneas 1 a 7 de los ejemplos en la página de ayuda. # ¿Qué hace este pedazo de código? rep(x=c("Pouroma", "minor"), times=7) rep(x=c("Pouroma", "minor"), each=7) # En el código arribam la función "rep" se utiliza para repetir la # información en el argumento "x". ## TAREA 12: ¿Cómo y por qué son los resultados de las dos líneas anteriores ## diferentes? ## TAREA 13: Cree un vector que contenga el texto "R es increíble!" 1000 veces. ## Si usted quiere, utilice la función "rep" para ayudarle a completar esta ## tarea rápidamente. ## TAREA 14: Vuelva a escribir el código anterior de 3 formas diferentes: ## 1. utilizando los nombres de los argumentos en su orden predeterminado ## 2. excluyendo los nombres de los argumentos ## 3. cambiando el orden de los argumentos ## TAREA 15: ¿Cuáles son los problemas con la siguiente línea de código? Lea el ## error y corrija el código. Rep(cSocratea exorrhiza), Times=7) rnorm(n=50) # El código anterior genera un vector que contiene 50 valores obtenidos # aleatoriamente de una distribución normal. ## TAREA 16: De acuerdo con la ayuda de la función 'rnorm': ## 1. ¿Qué otros argumentos pertenecen a esta función? ## 2. ¿Cuáles son los valores predeterminados para estos argumentos adicionales? ## TAREA 17: Genere un vector de longitud 25 con valores aleatorios a partir de ## una distribución normal con media igual a 50 y desviación estándar igual a 20. plot(x=rnorm(50), y=rnorm(50)) # La función plot se utiliza para hacer muchos tipos de figuras. En este caso, # se utiliza para hacer una gráfico de dispersión. La figura relaciona dos variables # aleatorias. A <- rnorm(n=1000, mean=0, sd=1) B <- rnorm(1000, sd=25, mean=100) # Esto crea dos vectores con valores aleatorios tomados de una distribución # normal. Luego guarda cada vector en objetos denominados A y B. Fíjese en # las diferencias en el orden de los argumentos entre las líneas de código. hist(A, col="lightblue") # Crea un histograma de los valores en el vector A. ## TAREA 18: Usando la ayuda en R, cree un histograma de los valores en el ## vector B, donde: ## 1. los datos se presentan en ~30 barras, ## 2. las barras son de color rojo, y ## 3. el eje X tiene el nombre "valores aleatorios del vector B". ## TAREA 19: Antes de ejecutar el código, ¿puede usted predecir cómo difieren ## los resultados de las siguientes tres líneas de código? plot(A, B) plot(y=A, x=B) plot(x=B, y=A) A <- 1:20 # Re-escribe el objeto A con la secuencia: 1, 2, 3, ..., 20. ## TAREA 20: Cree otro objeto de nombre "a" con la misma secuencia, pero esta vez ## use la función 'seq' para crear la secuencia. ## TAREA 21: Cree un diagrama de dispersión en el que se relacionan los valores ## de "A" con los valores de "a" . ## TAREA 22: Use la función "lines" para añadir una línea de correspondencia 1:1 ## al gráfico de dispersión. Para crear esta línea, la función ## necesita la coordenadas horizontales y verticales (X y Y) del punto de salida ## y del punto de llegada (origen en las coordenadas 0,0 y final en las coordenadas ## 20,20). ## TAREA 23: ¿Puede usted leer, entender y traducir el siguiente código? pred <- rnorm(250, 40, 10) resp <- 15 + 1.55*pred + rnorm(250, sd=5, mean=0) plot(pred, resp, cex=2, pch=21, col= "grey60", bg="gold") ## TAREA 24: Haga una figura similar a la anterior, pero cambie (1) el tamaño, ## (2) el tipo y (3) el color de los símbolos. ## TAREA 25: Si usted calcula el promedio y la desviación estándar de los ## valores del vector "pred", ¿qué espera como resultados? Calcule estos valores ## utilizando las funciones "mean" y "sd" para examinar sus expectativas. lm(resp ~ pred) ## La función "lm" crea modelos lineales de regresión. En este caso, 'lm' está ## haciendo una regression lineal en la que "resp" es una función de "pred". El ## símbolo '~' significa generalmente "es una función de" y se utiliza en fórmulas. summary(object=lm(resp ~ pred)) # La función "summary" crea un resumen de la información contenida en su # argumento "object". En este caso, proporciona información sobre la regresión # lineal de "resp" en "pred". ## TAREA 26: Haga un resumen (summary) de un vector de 300 valores aleatorios ## tomados de una distribución normal con una media de -13 y una desviación ## estándar de 5. ## TAREA 27: instale el paquete "vegan", cárguelo en su sesión de R (usando la ## función *library*), y acuda a la página de ayuda del paquete. ¿Para qué sirve ## el paquete "vegan"? ## TAREA 28: Encuentre, al final de la página de ayuda del paquete "vegan", el ## vínculo para el índice de funciones incluidas en el paquete. Síga ese vínculo ## y encuentre la función *betadiver*. ¿Para qué sirve esta función? ## TAREA 29: Cargue la base de datos "sipoo", incluida en el paquete "vegan". ## Use la función *help* para obtener información sobre esta base de datos. ## ¿Qué contiene esta base de datos? ## TAREA 30: Instale el paquete "ape", cárguelo en su sesión de R (usando la ## función *library*), y acuda a la página de ayuda del paquete. ¿Para qué sirve ## el paquete "ape"? ## TAREA 31: Encuentre, al final de la página de ayuda del paquete "ape", el ## vínculo para el índice de funciones incluidas en el paquete. Síga ese vínculo ## y encuentre la función *plot.phylo*. ¿Para qué sirve esta función? ## TAREA 32: Cargue la base de datos "bird.orders", incluida en el paquete "ape". ## Use la función *help* para obtener información sobre esta base de datos. ¿Qué ## contiene? ## TAREA 33: Examine los ejemplos al final de la página de ayuda para la función ## *plot.phylo*, y grafique la filogenia representada en la base de datos ## "bird.orders". ## TAREA 34: ¿Qué paquetes incluye el "TASK VIEW" sobre análisis de datos ## ecológicos y ambientales ("Environmetrics")? ## TAREA 35: ¿Qué paquetes incluye el "TASK VIEW" sobre filogenética? ################################################################################ ### RESPUESTAS ################################################################# ################################################################################ ## TAREA 1 ## 2 + 3 2 - 3 2 * 3 2 / 3 2 ^ 3 ## TAREA 2 ## ((5.6 * 11.7)/3 + 6.6)^2 ## TAREA 3 ## (5.6 * 11.7)/3 + 6.6^2 ## TAREA 4 ## length(c("Inga", "punctata")) ## TAREA 5 ## length(paste("Inga", "punctata")) ## TAREA 6 ## paste("Crax", "alector", "Cracidae") ## TAREA 7 ## # sep: un vector de caracteres para separar los términos. ## TAREA 8 ## # sep = " " ## TAREA 9 ## paste("Crax", "alector", sep="_") ## TAREA 10 ## # x, times, length.out, each ## TAREA 11 ## rep(1:4, 2) # Repetir la secuencia 1--4 2 veces rep(1:4, each = 2) # Repetir cada elemento de la secuencia de 1--4 2 veces rep(1:4, c(2,2,2,2)) # Repetir cada elemento de la secuencia de 1--4 2 veces rep(1:4, c(2,1,2,1)) # Repetir el primer y el tercer elemento de la secuencia 2 # veces, y el segundo y cuarto elementos s?lo una vez rep(1:4, each = 2, len = 4) # Repetir cada elemento de la secuencia de 1--4 2 veces, # entregar un resultado con sólo los 4 primeros elementos. rep(1:4, each = 2, len = 10) # Repetir cada elemento de la secuencia de 1--4 2 veces, # y entregar un resultado con 10 elementos. rep(1:4, each = 2, times = 3) # Repetir cada elemento de la secuencia 2 veces, # y luego repetir ese resultado 3 veces. ## TAREA 12 ## rep(x=c("Pouroma", "minor"), times=7) # Repite el vector 7 veces rep(x=c("Pouroma", "minor"), each=7) # Repetir cada elemento del vector 7 veces ## TAREA 13 ## rep(x="R is awesome", times=1000) ## TAREA 14 ## rep(x="R es increíble", times=1000) rep("R es increíble", 1000) rep(times=1000, x="R es increíble") ## TAREA 15 ## # A. La función es "rep" no "Rep" # B. La función "c" no está seguida de "(" # C. Socratea y exorriza deben estar entre comillas # D. Tiene que haber una coma que separa los valores "Socratea" y "exorrhiza" antes # de concatenarlas rep(c("Socratea", "exorrhiza"), times=7) ## TAREA 16 ## # mean = 0 y sd = 1 ## TAREA 17 ## rnorm(n=25, mean=50, sd=20) ## TAREA 18 ## hist(x=B, breaks=30, col="firebrick1", xlab="Values of random vector B") ## TAREA 19 ## plot(A, B) # A en el eje x, B en el eje y plot(y=A, x=B) # B en el eje x, A en el eje y plot(x=B, y=A) # B en el eje x, A en el eje y ## TAREA 20 ## a <- seq(from=1, to=20, by=1) ## TAREA 21 ## plot(a, A) ## TAREA 22 ## lines(x=c(1,20), y=c(1,20), col="red") ## TAREA 23 ## pred <- rnorm(250, 40, 10) # Crea un vector de 250 valores aleatorios a partir # de una distribución normal con media 40 y # desviación estándar 10. Después pone ese vector # en un objeto denominado *pred* resp <- 15 + 1.55*pred + rnorm(250, sd=5, mean=0) # 1. Multiplica los valores de objeto "pred" por 1,55. # 2. Al resultado anterior, le suma el valor 15. # 3. Crear un vector de 250 valores aleatorios a # partir de una distribución normal con media cero y # desviación estándar 5. # 4. Suma los vectores creados en los pasos 2 y 3. plot(pred, resp, cex=2, pch=21, col= "grey60", bg="gold") # Relaciona los valores en el objeto "resp" con aquellos # en el objeto "pred". El tamaño del símbolo es 2. El # tipo de símbolo es 21. El color del borde del símbolo # es "grey60". Y el color de fondo del símbolo es oro. ## TAREA 24 ## plot(pred, resp, cex=4, pch=22, col= "white", bg="darkolivegreen") ## TAREA 25 ## # Se podría esperar que sean cerca de 40 y 10 para la media y la desviación estándar, # respectivamente mean(pred) sd(pred) ## TAREA 26 ## summary(rnorm(n=300, mean=-13, sd=5)) ## TAREA 27 ## # Después de instalar "vegan", cárguelo: library(vegan) # acceda a la página de ayuda del paquete: ?vegan # El paquete "vegan" contiene herramientas (funciones y bases de datos) para # describir comunidades ecologicas, incluyendo análisis de diversidad, ordenación y # análisis de disimulitud. ## TAREA 28 ## # La función *betadiver* calcula varios índices de beta-diversidad. ## TAREA 29 ## # la base de datos "sipoo" contiene información sobre la presencia de 50 especies # de aves en 18 islas del Archipielago de Sipoo Archipelago, Finlandia. ## TAREA 30 ## # el paquete "ape" sirve para leer, escribir, manipular, analizar y simular filogenias # y secuencias de DNA, calcular distancias entre secuencias de DNA, traducir DNA a # secuencias de amino acidos, estimar filogenias con base en métodos de distancia y # realizar análisis comparativos y de diversificación. Además, "ape" incluye funciones # para programar métodos filogenáticos nuevos. ## TAREA 31 ## # Para graficar filogenias. ## TAREA 32 ## # Describe relaciones filogenéticas entre ordenes de aves, según Sibley and Ahlquist (1990). ## TAREA 33 ## plot.phylo(bird.orders) plot.phylo(bird.orders, type="fan", cex=0.5) ## TAREA 34: ade4 (core) amap analogue aod ape aqp BiodiversityR boussinesq bReeze CircStats circular cluster (core) cocorresp Distance diveMove dse dsm DSpat dyn dynatopmodel dynlm e1071 earth eco ecodist EcoHydRology EnvStats equivalence evd evdbayes evir extRemes fast FD flexmix forecast fso gam gamair hydroGOF HydroMe hydroPSO hydroTSM Interpol.T ipred ismev labdsv (core) latticeDensity lme4 maptree marked MASS (core) mclust mda mefa metacom mgcv (core) mrds nlme nsRFA oce openair ouch party pastecs pgirmess popbio prabclus primer pscl pvclust qualV quantreg quantregGrowth randomForest Rcapture rioja RMark RMAWGEN rpart rtop seacarb seas secr segmented sensitivity simba simecol siplab soiltexture SPACECAP SpatialExtremes StreamMetabolism strucchange surveillance tiger topmodel tseries unmarked untb vegan (core) vegetarian VGAM wasim zoo ## TAREA 35: adephylo adhoc adiv ape (core) apTreeshape BAMMtools bayou betapart BioGeoBEARS BoSSA caper cati convevol corHMM DAMOCLES DDD dendextend dispRity distory diversitree evobiR expoTree geiger geomorph ggmuller ggplot2 GUniFrac HMPTrees HyPhy idendr0 ips iteRates jaatha kdetrees markophylo MCMCglmm metafor MPSEM mvMORPH nLTT ouch outbreaker OutbreakTools OUwie paleotree paleoTS pastis PBD PCPS pegas phangorn phyclust phyext2 phylobase phylocanvas phyloclim PHYLOGR phylogram phyloland phylolm phylotools phyloTop phyreg phytools pmc ratematrix rdryad rmetasim rncl RNeXML rotl rphast Rphylip SigTree strap surface SYNCSA taxize TESS tidytree treebase treedater TreePar treeplyr TreeSim vegan windex