Examen extraordinario 29-jun-2020
Índice
1 condiciones
- Justifica las respuestas.
- Se valorarán
- el grado de automatización;
- la comprobación de los resultados.
2 enunciados
- (2 puntos) Escribe una función en R llamada
sumario
que- aplicada a un dataframe, diga cuántas variables numéricas y
cuántos factores tiene:
> sumario (mtcars) 0 factores y 11 numéricas > sumario (ChickWeight) 2 factores y 2 numéricas
- aplicada a una regresión lineal, devuelva los coeficientes de
regresión significativos al 5% y el coeficiente de determinación:
> sumario (lm (mpg ~ ., mtcars)) Ningún coeficiente significativo > sumario (lm (Speed ~ ., morley)) (Intercept) Expt R2 913.2447368 -19.0500000 0.1181058
sumario <- function (x) if (is.data.frame (x)) cat (sum (sapply (x, is.factor)), "factores y", sum (sapply (x, is.numeric)), "numéricas\n") else { s <- summary (x) c <- s$coefficients coesig <- c[c[,"Pr(>|t|)"]<0.05,"Estimate"] if (length (coesig) == 0) cat ("Ningún coeficiente significativo\n") else c (coesig, R2 = s$r.squared) }
- aplicada a un dataframe, diga cuántas variables numéricas y
cuántos factores tiene:
- (1 punto) Escribe una función en R que tomo como argumento un vector x y devuelva
- una lista de parejas
- una lista de tríos
- una lista de todos los subconjuntos de orden k < n=length(x)
Por ejemplo,
# devuelve una lista con estos elementos: parejas(1:4) # 12 13 14 23 24 34 trios(1:4) # 123 124 134 234 subconjuntos(1:4,1) # 1 2 3 4 subconjuntos(1:4,4) # 1234
parejas <- function (lista) { resul <- list() n <- length(lista) for (i in 1:(n-1)) for (j in (i+1):n) resul <- c (resul, list(c(i,j))) resul } trios <- function (lista) { resul <- list() n <- length(lista) for (i in 1:(n-2)) for (j in (i+1):(n-1)) for (k in (j+1):n) resul <- c (resul, list(c(i,j,k))) resul } subconjuntos <- function (x, k) { if (k == 1) return (as.list (x)) n <- length(x) cadena <- paste0("lista <- list(); for (i1 in 1:",n-k+1,")") for (i in 2:k) cadena <- paste0 (cadena, "for (i", i, " in (i", i-1, "+1):", n-k+i, ")") cadena <- paste (cadena, "lista <- c(lista, list(c(", paste0("i", 1:k, collapse=","), "))); lista") eval (parse (text=cadena)) } ## otra forma: subconjuntos <- function (lista, k) combn (lista, k, simplify=FALSE) parejas <- function (lista) subconjuntos (lista, 2) trios <- function (lista) subconjuntos (lista, 3)
- Escribe una función en R que tome como argumento una cadena y
devuelva verdadero si es un palíndromo y falso en otro caso:
- (1 punto) el argumento se considera una palabra:
palindromo ("salas") # TRUE palindromo ("alas") # FALSE
- (0,5 puntos) el argumento puede ser una frase
palindromo ("dabale arroz a la zorra el abad") # TRUE
- (0,5 puntos) además, puede contener vocales acentuadas
palindromo ("dábale arroz a la zorra el abad") # TRUE
palindromo1a <- function (cadena) { letras <- strsplit (cadena, "") [[1]] identical (letras, rev(letras)) } palindromo1b <- function (cadena) { n <- nchar (cadena) all (sapply (1:(n/2), function (i) substring(cadena,i,i) == substring(cadena,n-i+1,n-i+1))) } palindromo2 <- function (cadena) palindromo1a (gsub (" ", "", cadena)) palindromo <- function (cadena) palindromo2 (chartr ("áéíóú", "aeiou", cadena))
- (1 punto) el argumento se considera una palabra:
- (1 punto) Genera un documento PDF que contenga, en la página
i-ésima, una gráfica del crecimento de pollo (Chick) i-ésimo del
dataframe ChickWeight: abscisas Time y ordenadas weight.
pdf ("ejercicio4.pdf") for (i in levels(ChickWeight$Chick)) plot (weight ~ Time, ChickWeight, subset=Chick==i, type="l") dev.off ()
- (1 punto) En esta carpeta hay datos sobre vuelos en Estados Unidos.
Hay un fichero por cada año (los que empiezan por 1987 … 2008).
Implementa un programa en R que cargue en un dataframe mil registros de cada uno de esos ficheros, muestreados al azar.
lista <- lapply (1987:2008, function (año) { nombre <- paste0 (año, ".csv.bz2") servidor <- paste0 ("http://bellman.ciencias.uniovi.es/~carleos/", "master/manadine/curso1/TIplE/ejercicios/datos/vuelos/") download.file (paste0 (servidor, nombre), nombre) completo <- read.csv (bzfile (nombre)) completo[sample(nrow(completo),1000),] }) datos <- do.call (rbind, lista)