################################################################################ ### TALLER FUNDAMENTOS DE R ### ### EJERCICIO 2.1: Funciones y argumentos ### ### ### ### Center for Conservation and Sustainable Development ### ### Missouri Botanical Garden ### ### Website: rbasicsworkshop.weebly.com ### ################################################################################ ## OBJETIVO: ## El objetivo de este ejercicio es practicar los conceptos de "función", ## "argumento" y "operador", y aprender algunas funciones básicas en R. 2 + 3 # Esto 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) # Esto 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 de "sum" no es el mismo # Como "Sum", y en este caso 'Sum' no existe. 10-2/8 # Divide 2 en 8,y luego resta el valor de 10. Cuando R se encuentra con # múltiples operaciones, R sigue el estándar de hacer la división y # multiplicación antes de la suma o resta. (10-2)/8 # Utilizando paréntesis se puede especificar el orden en el que las operaciones # deben ocurrir. 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 como 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 como una de una sola línea de código. c("Inga", "punctata") # Concatena los caracteres (palabras) "Inga" y "punctata" y formar un vector ## TAREA 4: Utilice la función "length" para confirmar la longitud de este vector paste("Inga", "punctata") # 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 de este vector ## TAREA 6: Utilice la función "pegar" para unir el género y la especie de su ## especie favorita. A continuación, utilice la función "paste" para pegar ## juntos, en este orden, la especie y el género y la familia de su especie ## favorita. ?paste # Abre la ayuda de la función "paste". ## TAREA 7: Use de la ayuda para esta función, identifique cuál es el papel del ## argumento de "sep". ## Tarea 8: ¿Este argumento tiene un valor predeterminado? ¿Cuál es ese valor? ## TAREA 9: Use "paste" para unir el género y especies 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 identificar sus principales ## argumentos. ## TAREA 11: Ejecute las líneas 1 a 9 de los ejemplos en la página de ayuda. Que ## hace este pedazo de código? rep(x=c("Pouroma", "minor"), times=7) rep(x=c("Pouroma", "minor"), each=7) # Utiliza la función "rep" 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 contiene "R es increíble!" 1000 veces. Si usted ## quiere, utilice la función "rep" para ayudarle a completar esta tarea con ## rapidez. ## 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 corriga el código. Rep(cSocratea exorrhiza), Times=7) rnorm(n=50) # Genera un vector que contiene 50 valores al azar de una distribución normal. rnorm(50) # También genera un vector que contiene 50 valores aleatorios de una distribución normal. ## TASK16: 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 50 y desviación estándar de 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. En la figura, dos variables # aleatorias se representan unas contra otra. 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ígese en # el 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 de azar del vector B". ## TAREA 19: Antes de ejecutar el código, puede usted predecir como los ## resultados de los próximos tres comandos serán diferentes? plot(A, B) plot(y=A, x=B) plot(x=B, y=A) A <- 1:20 # Re-reescribe el objeto A con la secuencia: 1, 2, 3, ..., 20. ## TAREA 20: Cree otro objeto de nombre "a" con la misma secuencia, pero el ## use la función 'seq'. ## TAREA 21: Cree un diagrama de dispersión en la que se relacionan los valores ## de "A" con los valores de "a" . ## TAREA 22: Use la función "lines" para crear una línea de correspondencia 1:1 ## encima del gráfico de dispersión. Para crear esta línea, la función ## necesita la coordenadas X y Y de un punto de salida y un 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 código siguiente? 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 cifra 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 confirmar o revisar sus expectativas. lm(resp ~ pred) ## La función "lm" crea modelos lineales. En este caso, 'lm' está haciendo una ## regression lineal donde "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 "objeto". En este caso, proporciona información sobre la regresión # lineal entre "resp" y "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. ################################################################################ ### SOLUCIONES PARA TAREAS ##################################################### ################################################################################ ## 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("Chrotopterus", "auritus") ## TAREA 7 ## # sep: un vector de caracteres para separar los términos. ## TAREA 8 ## # sep = " " ## TAREA 9 ## paste("Chrotopterus", "auritus", 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, # pero devolver sólo los 4 primeros elementos del resultado rep(1:4, each = 2, len = 10) # Repetir cada elemento de la secuencia de 1--4 2 veces, # y devolver 10 elementos del resultado 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 en el vector de 7 veces ## TAREA 13 ## rep(x="R is awesome", times=1000) ## TAREA 14 ## rep(x="R is awesome", times=1000) rep("R is awesome", 1000) rep(times=1000, x="R is awesome") ## TAREA 15 ## # A. La función es "rep" no "Rep" # B. La función "c" no está seguida de "(" # C. Socratea y exorriza necesitan estar en 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. Ponga 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, sumar el valor 15 # 3. Crear un vector de 250 valores aleatorios a # partir de una distribución noormal con media y # desviación estándar 5 y 0 # 4. Suma los vectores creados en los pasos 2 y 3 plot(pred, resp, cex=2, pch=21, col= "grey60", bg="gold") # Colocar los valores en el objeto "resp" contra aquellos # en el objeto "pred". el tamaño del símbolo es 2. El # Símbolo es de tipo 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 sd, respectivamente mean(pred) sd(pred) ## TAREA 26 ## summary(rnorm(n=300, mean=-13, sd=5))