Tracks
/
R
R
/
Ejercicios
/
Observador de aves
Observador de aves

Observador de aves

Ejercicio de aprendizaje

Introducción

Este es un concepto importante en R. Para ayudarte a entender las posibilidades, puede ser útil considerar la dimensionalidad de las entradas y las salidas de las distintas funciones.

Vector de entrada, escalar de salida

Ya vimos 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 entran en esta categoría, como mean().

Para los vectores lógicos, están all() y any().

Vector de entrada, vector de salida

Muchas funciones de R operan sobre vectores completos y a menudo su salida también es un vector. 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

Esto no es solo conciso y cómodo, pues evita la necesidad de bucles, comprensiones de listas o recursión, que son comunes 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

De manera predeterminada, el orden es ascendente. Especifica 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 generan salidas vectoriales acumulativas, recorriendo 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

Te encanta observar aves y llevas la cuenta de cuántas han visitado tu jardín en los últimos siete días.

Tienes seis tareas, todas relacionadas con el número de aves que visitaron tu jardín.

1. Comprueba cuántas aves visitaron hoy

Implementa la función today() para que devuelva cuántas aves visitaron tu jardín hoy. Los conteos de aves están ordenados por día: el primer elemento es el conteo del día más antiguo y el último es el conteo de hoy.

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

2. Incrementa el conteo de hoy

Implementa la función increment_todays_count() para incrementar el conteo 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 aves visitantes

Implementa la función has_day_without_birds() que devuelve TRUE si hubo un día en el que cero aves visitaron el jardín; de lo 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 aves visitantes durante los primeros días

Implementa la función count_for_first_days() que devuelve el número de aves que han visitado tu jardín desde el inicio de la semana, pero limita el conteo al número de días especificado desde el inicio 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 son más ajetreados que otros. Un día ajetreado es aquel en el que cinco o más aves 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 aves durante la última semana

Tienes curiosidad por saber cuántas aves han visitado en total lo que va de la semana. Calcula los totales acumulados para 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 qué tan ajetreados son

Sospechas que las visitas de aves se ven afectadas por los patrones del tráfico de las carreteras cercanas, que son distintos los fines de semana y entre semana.

Ordena las abreviaturas de los días en orden descendente según cuántas aves 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 una pestaña nuevas
R Exercism

¿Todo listo para empezar Observador de aves?

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