Taller de modelización – examen de programación en R
Transcripción
Taller de modelización – examen de programación en R
Master: Ecología terrestre y gestión de la biodiversidad – Curso 2012-2013 Módulo: Herramientas metodológicas en ecología terrestre Asignatura: Taller de modelización – examen de programación en R Nombre: …………………………………………………………..……… 5-Diciembre-2012 ***** Sólo hay que responder 5 preguntas – podéis descartar la que queráis ***** 1. Depués de ejecutar el siguiente programa de R, ¿Cual es el valor de las variables x e y? x y x y <<<<- 1 2 y x Respuesta: x = 2, y = 2; es un intercambio de variables mal realizado 2. Considera que se ha ejecutado la siguiente función de R. media <- function(a, b){ c <- (a + b) / 2 return(2) } Si ejecutamos la siguiente línea de código, ¿Qué resultado obtendremos? media(5, 11) Respuesta: 2; la función está mal definida, siempre devuelve el mismo valor 3. Escribe un programa de R que guarde todos los múltiplos de 7 menores de 100 en un vector. # esta es una posibilidad mult_7 <- numeric(99%/%7) k <- 1 for (i in 1:99){ resto <- i %% 7 if (resto == 0){ mult_7[k] <- i k <- k + 1 } } # end for i mult_7 4. Escribe un programa que genere números pseudoaleatorios entre 0 y 1 con distribución uniforme hasta que encuentre uno que sea menor que 0.001. Al final de su ejecución el programa debe escribir en la consola el número de intentos que ha necesitado. # esta es una posibilidad x <- 999 intentos <- 0 while(x >= 0.001){ x <- runif(1) intentos <- intentos + 1 } intentos 5. ¿Qué hace el siguiente programa de R? ¿Qué valor aproximado tendrá la variable s después de ejecutar el programa? n <- 1000 x <- runif(n) s <- 0 for (i in 1:n){ s <- s + x[i] } print(s) Respuesta: genera 1000 números aleatorios con distribución uniforme entre 0 y 1 y los suma. La variable s tendrá un valor cercano a 500. 6. El siguiente programa de R contiene 5 errores. ¿Sabrías encontrarlos? Indica con un número el sitio donde se encuentra el error y explícalo y corrígelo en una hoja aparte. # modelo de crecimiento exponencial de poblaciones con # estocasticidad ambiental meanr <- 0.1 # tasa instantanea MEDIA de crecimiento sdr <- 0.2 # DESV. ST. de la tasa instantanea de crec. N0 <- 10 # tamaño de poblacion inicial tmax <- 100 # duracion de la simulacion dt <- 1 # paso de tiempo npasos <- tmax / dt # num pasos de la simulacion t <- numeric(npasos) n <- numeric(npasos) # vector de tiempos # vector de tamaños poblacionales # modelo de crecimiento exponencial de poblaciones crec_exp <- function(N, par1, tinc){ res <- N * par1 * tinc return(res) } #end crec_exp i <- 1 t[i] <- 0 n[i] <- N0 if (N0 >= 1) extincion <- FALSE while ((i < npasos) & !extincion) { i <- i + 1 t[i] <- t[i-1] + dt rr <- rnorm(1, meanr, sdr) n[i] <- n[i-1] + crec_exp(n[i-1], rr, dt) if (n[i] < 1){ cat("la poblacion se ha extinguido en el tiempo", t[i]) extincion <- TRUE } } # end while plot(t, n) Errores: 1. En la segunda línea falta el símbolo de comentario (#) 2. Falta el símbolo de negación (!) delante de la variable extinción. De la forma que está ahora el bucle while no se ejecuta nunca (extincion = FALSE) 3. Es function y no funcion 4. La función crec_exp espera 3 parámetros y solo se le pasan 2. Hay que añadir el paso de tiempo dt a la llamada de la función como tercer parámetro 5. Falta } para cerrar el if