Este é um conceito importante em R. Para ajudar a entender as possibilidades, pode ser útil considerar a dimensionalidade da entrada e da saída das várias funções.
Já vimos funções que recebem um vetor e retornam um único valor, do tipo escalar:
> v <- 1:5
> length(v)
#> [1] 5
> sum(v)
#> [1] 15
Muitas funções estatísticas também estão nessa categoria, como mean().
Para vetores lógicos, existem all() e any().
Muitas funções em R operam sobre vetores inteiros, geralmente produzindo uma saída vetorial. Isso inclui a maioria das funções matemáticas:
> sq <- c(4, 9, 16, 25)
> sqrt(sq) # square root
#> [1] 2 3 4 5
Isso não é apenas conciso e conveniente, evitando a necessidade de laços, compreensão de listas ou recursão, que são comuns em outras linguagens. Em R, as funções vetoriais costumam rodar muito mais rápido do que essas técnicas.
Para ordenar um vetor, há sort(), que retorna os valores, e order(), que retorna os índices:
> v <- c("I", "am", "not", "in", "order")
> sort(v)
#> [1] "am" "I" "in" "not" "order"
> order(v)
#> [1] 2 1 4 3 5
O padrão é ordenar em ordem crescente.
Especifique decreasing = TRUE se necessário, ou use rev() para inverter um vetor 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
Há também funções que produzem saídas vetoriais cumulativas, operando sobre o vetor de entrada da esquerda para a direita:
> cumsum(1:5)
#> [1] 1 3 6 10 15 # sums
> cumprod(1:5)
#> [1] 1 2 6 24 120 # equivalent to factorials
Uma extensão desse conceito também pode ser usada para comparar vetores.
Por exemplo, considere a função pmax(), que calcula o máximo par a par:
> v
#> [1] 2 7 9
> w
#> [1] 3 1 5
> pmax(v, w)
#> [1] 3 7 9 # max of each pairwise comparison
Você adora observar pássaros e acompanha quantos visitaram seu jardim nos últimos sete dias.
Você tem seis tarefas, todas lidando com os números de pássaros que visitaram seu jardim.
Implemente a função today() para retornar quantos pássaros visitaram seu jardim hoje. As contagens de pássaros estão ordenadas por dia, com o primeiro elemento sendo a contagem do dia mais antigo e o último elemento sendo a contagem de hoje.
birds_per_day <- c(2, 5, 0, 7, 4, 1)
today(birds_per_day)
# => 1
Implemente a função increment_todays_count() para incrementar a contagem de hoje:
birds_per_day <- c(2, 5, 0, 7, 4, 1)
increment_todays_count(birds_per_day)
# => c(2, 5, 0, 7, 4, 2)
Implemente a função has_day_without_birds() que retorna TRUE se houve um dia em que zero pássaros visitaram o jardim; caso contrário, retorne FALSE:
birds_per_day <- c(2, 5, 0, 7, 4, 1)
has_day_without_birds(birds_per_day)
# => true
Implemente a função count_for_first_days() que retorna o número de pássaros que visitaram seu jardim desde o início da semana, mas limita a contagem ao número especificado de dias a partir do início da semana.
birds_per_day <- c(2, 5, 0, 7, 4, 1)
count_for_first_days(birds_per_day, 4)
# => 14
Alguns dias são mais movimentados que outros. Um dia movimentado é aquele em que cinco ou mais pássaros visitaram seu jardim.
Implemente a função busy_days() para retornar o número de dias movimentados:
birds_per_day <- c(2, 5, 0, 7, 4, 1)
busy_days(birds_per_day)
# => 2
Você quer saber quantos pássaros no total visitaram até agora nesta semana. Calcule os totais acumulados para cada dia.
running_total(c(7, 6, 5, 4, 3, 2, 1))
#> [1] 7 13 18 22 25 27 28
Você suspeita que as visitas dos pássaros são afetadas por padrões do trânsito nas proximidades, sendo diferentes nos fins de semana e nos dias úteis.
Ordene as abreviações dos dias em ordem decrescente de quantos pássaros visitaram.
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"
Crie sua conta no Exercism para aprender e dominar R com 21 conceitos111 exercícios e mentoria humana de verdade, tudo de graça.