Rutas
/
R
R
/
Ejercicios
/
Observador de pájaros
Observador de pájaros

Observador de pájaros

Ejercicio de aprendizaje

Introducción

Este es un concepto amplio en R. Para entender mejor las posibilidades, puede resultar útil considerar la dimensionalidad de la entrada y la salida de las distintas funciones.

Vector de entrada, escalar de salida

Ya hemos visto funciones que reciben un vector y devuelven un único valor de tipo escalar:

> v <- 1:5
> length(v)
#> [1] 5
> sum(v)
#> [1] 15

Muchas funciones estadísticas también pertenecen a esta categoría, como mean().

Para vectores lógicos, existen all() y any().

Vector de entrada, vector de salida

Muchas funciones de R operan sobre vectores completos y a menudo devuelven un vector como resultado. Esto incluye la mayoría de las funciones matemáticas:

> sq <- c(4, 9, 16, 25)
> sqrt(sq) # square root
#> [1] 2 3 4 5

No solo es conciso y cómodo, ya que evita tener que usar bucles, comprensiones de listas o recursión, algo habitual en otros lenguajes. En R, las funciones vectoriales suelen ejecutarse mucho más rápido que esas técnicas.

Para ordenar un vector, sort() devuelve los valores y order() devuelve los índices:

> v <- c("I", "am", "not", "in", "order")
> sort(v)
#> [1] "am"    "I"     "in"    "not"   "order"
> order(v)
#> [1] 2 1 4 3 5

Por defecto, la ordenación es ascendente. Indica decreasing = TRUE si es necesario, o usa rev() para invertir un vector existente.

v <- c("I", "am", "not", "in", "order")
sort(v, decreasing = TRUE)
#> [1] "order" "not"   "in"    "I"     "am"

rev(1:4)
#> [1] 4 3 2 1

También hay funciones que producen resultados vectoriales acumulativos y que operan sobre el vector de entrada de izquierda a derecha:

> cumsum(1:5)
#> [1]  1  3  6 10 15  # sums
> cumprod(1:5)
#> [1]   1   2   6  24 120 # equivalent to factorials

Varios vectores de entrada, vector de salida

Una extensión de este concepto también sirve para comparar vectores. Por ejemplo, considera la función pmax(), que calcula el máximo por pares:

> v
#> [1] 2 7 9
> w
#> [1] 3 1 5
> pmax(v, w)
#> [1] 3 7 9 # max of each pairwise comparison

Instrucciones

Eres un ávido observador de aves que lleva la cuenta de cuántos pájaros han visitado tu jardín en los últimos siete días.

Tienes seis tareas, todas relacionadas con el número de pájaros que han visitado tu jardín.

1. Comprueba cuántos pájaros han visitado hoy el jardín

Implementa la función today() para que devuelva cuántos pájaros han visitado tu jardín hoy. Los recuentos de pájaros están ordenados por día, siendo el primer elemento el recuento del día más antiguo y el último elemento el recuento de hoy.

birds_per_day <- c(2, 5, 0, 7, 4, 1)
today(birds_per_day)
# => 1

2. Incrementa el recuento de hoy

Implementa la función increment_todays_count() para incrementar el recuento de hoy:

birds_per_day <- c(2, 5, 0, 7, 4, 1)
increment_todays_count(birds_per_day)
# => c(2, 5, 0, 7, 4, 2)

3. Comprueba si hubo un día sin pájaros visitantes

Implementa la función has_day_without_birds() que devuelve TRUE si hubo un día en el que cero pájaros visitaron el jardín; en caso contrario, devuelve FALSE:

birds_per_day <- c(2, 5, 0, 7, 4, 1)
has_day_without_birds(birds_per_day)
# => true

4. Calcula el número de pájaros visitantes durante los primeros días indicados

Implementa la función count_for_first_days() que devuelve el número de pájaros que han visitado tu jardín desde el principio de la semana, pero limita el recuento al número de días especificado desde el principio de la semana.

birds_per_day <- c(2, 5, 0, 7, 4, 1)
count_for_first_days(birds_per_day, 4)
# => 14

5. Calcula el número de días ajetreados

Algunos días están más ajetreados que otros. Un día ajetreado es aquel en el que cinco o más pájaros han visitado tu jardín. Implementa la función busy_days() para que devuelva el número de días ajetreados:

birds_per_day <- c(2, 5, 0, 7, 4, 1)
busy_days(birds_per_day)
# => 2

6. Calcula el total acumulado de visitas de pájaros durante la última semana

Tienes curiosidad por saber cuántos pájaros en total han visitado tu jardín en lo que va de semana. Calcula los totales acumulados de cada día.

running_total(c(7, 6, 5, 4, 3, 2, 1))
#> [1]  7 13 18 22 25 27 28

7. Ordena los nombres de los días según lo ajetreados que sean

Sospechas que las visitas de los pájaros se ven afectadas por patrones de tráfico rodado cercano, por lo que son diferentes los fines de semana que entre semana.

Ordena las abreviaturas de los días en orden descendente según cuántos pájaros visitaron.

day_names <- c("Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun")
birds_per_day <- c(5, 2, 4, 6, 0, 9, 8)
busy_days_of_week(birds_per_day, day_names)
#> [1] "Sat" "Sun" "Thu" "Mon" "Wed" "Tue" "Fri"
Editar en GitHub El enlace se abre en una ventana o pestaña nueva
R Exercism

¿Listo para empezar Observador de pájaros?

Regístrate en Exercism para aprender y dominar R con 21 conceptos111 ejercicios y mentoría humana real, todo gratis.