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

Documentos relacionados