5.5 Ejercicios del capítulo

  1. Reproduce el resultado del siguiente loop for, utilizando la función replicate():
set.seed(123)
lista1 <- list() # Lista vacía
for (i in 1:3) { # Número de iteraciones = 5
  lista1[[i]] = rnorm(6, 0, 1) # Conjunto aleatorio normal para cada iteración
}
lista1
# [[1]]
# [1] -0.56048 -0.23018  1.55871  0.07051  0.12929  1.71506
# 
# [[2]]
# [1]  0.4609 -1.2651 -0.6869 -0.4457  1.2241  0.3598
# 
# [[3]]
# [1]  0.4008  0.1107 -0.5558  1.7869  0.4979 -1.9666
  1. Crea la base de datos DF numérica (código ya definido en el siguiente chunk), que tiene las dimensiones 12 (filas) x 5 (columnas). Esta base contiene valores no deseados: -999. Crea y utiliza una función llamada cambiarNA() que te permita cambiar estos valores por NA.
# Base de datos DF
set.seed(123)
secuencia <- c(seq(0.5, 7.9, length = 10), -999, 5555)
DF <- data.frame(replicate(5, 
                           sample(secuencia, 12, rep = TRUE)))
DF <- round(DF,2)

# Darle nombre a sus columnas
colnames(DF) <- paste0("Var", 1:5)

# Revisar el contenido de DF
DF 
#       Var1    Var2    Var3    Var4    Var5
# 1     2.14    3.79    7.08    7.90    6.26
# 2     2.14    2.14    2.14    5.43 5555.00
# 3     7.90 -999.00    2.97 -999.00    1.32
# 4     1.32    7.08    0.50 5555.00    0.50
# 5     4.61 5555.00 -999.00    3.79    7.08
# 6  -999.00    7.08    5.43    5.43 -999.00
# 7     3.79    7.08    3.79    3.79    7.08
# 8     2.97    2.14 5555.00 -999.00    4.61
# 9     4.61    6.26    7.90    4.61    3.79
# 10    7.08    7.90    5.43    7.08    7.08
# 11    7.90    5.43    7.08    1.32    7.90
# 12 -999.00    7.90    7.08    3.79 5555.00
  1. Utilizando la base de datos DF creada inicialmente en el ejercicio 2, modifica la función cambiarNA() para que no solo cambie -999 a NA, sino que cambie cualquier valor que tú le proporciones con un argumento. Llama a esta función cambiarNA2(). Utilízala para reemplazar los valores 5555 a NA.

  2. Utilizando la base de datos DF creada inicialmente en el ejercicio 2, modifica la función cambiarNA2() de tal manera que te permita definir más de un valor (un vector numérico) como elementos a ser reemplazados por NA. Llama a esta función cambiarNA3(). Cambia por NA los valores -999 y 5555. Pista: Esta función deberá contener un loop para aplicarle la función de cambio por NA a un elemento del vector a la vez en cada iteración.

  3. Crea un loop for que itere sobre los números del 1 al 50 y calcule el cubo de cada número, de manera que los resultados se vayan guardando en un vector llamado preliminar. Luego, crea un segundo loop que te permita identificar y almacenar solamente los números menores a la mediana median() del conjunto de datos preliminar en un nuevo vector llamado final.

  4. En R ya existe una función para calcular la varianza y es var(). Pero este ejercicio se trata de poner en juego lo que aprendiste sobre programación en R. La fórmula matemática de la varianza poblacional, con denominador \(n\), Ecuación (5.1). Pero la función var() de R contiene la fórmula matemática para calcular la varianza de muestras, no de poblaciones enteras. La fórmula matemática de la varianza muestral que usa R tiene como denominador \(n-1\), Ecuación (5.2). Crea una función llamada var2() que calcule la varianza del conjunto de datos llamado vector. Finalmente, compara tus resultados con los obtenidos por var().

\[\begin{align} \sigma^2 = \frac{1}{n}*{\displaystyle\sum_{i=1}^{n}(x_i - \mu)^2} \tag{5.1} \end{align}\]

\[\begin{equation} \sigma^2 = \frac{1}{n-1}*{\displaystyle\sum_{i=1}^{n}(x_i - \mu)^2} \tag{5.2} \end{equation}\]

set.seed(123)
vector <- rnorm(50, 21, 1.6)
  1. Carga la base de datos npk. Usando una función de la familia apply(), calcula la el promedio, mediana y desviación estándar de la columna yield para cada categoría (numérica) de la columna block. Con ello, se conocerá el promedio de producción que se obtuvo en cada bloque para un estudio de mejora fitogenética:
data("npk")
  1. Ejecuta el siguiente código para crear una lista llamada iris3Lista a partir de la base de datos de ejemplo iris3 (un array). Si revisas iris3Lista, notarás que continene 3 elementos, cada uno de ellos es una matriz de datos de cuatro columnas (Sepal L., Sepal W., Petal L., y Petal W.). Utilizando dos funciones de la familia apply(), calcula el promedio de cada columna de cada elemento de la lista iris3Lista.
# Cargar iris3
data("iris3")

# Convertirla a lista
iris3Lista <- list(setosa = iris3[,,1],
                versicolor = iris3[,,2],
                virginica = iris3[,,3])