Separe com keep() e discard()
Queremos dividir nossos resultados em dois grupos: os dias acima de 100 e os dias abaixo de 100. Vamos combinar keep() e discard() para isso.
Por que duas funções? Não poderíamos usar uma só? Não poderíamos criar um mapper chamado is_less_than_hundred?
Poderíamos, mas isso seria mais propenso a erros: é mais fácil alternar de
keep()paradiscard()do que copiar e colar. Ao combinar as duas funções, precisamos de apenas um mapper. Isso significa que, se quisermos mudar o limite, vamos precisar fazer isso só uma vez, não duas, como teríamos de fazer se tivéssemos dois mappers.
Essa é uma regra que você deve buscar aplicar ao programar: escreva código de modo que, se precisar mudar algo, você tenha que mudar apenas uma vez.
all_visits ainda está disponível no seu workspace.
Este exercicio faz parte do curso
Programação Funcional Intermediária com purrr
Instruções do exercicio
- Faça o mapeamento da função
set_names()emall_visitspara adicionar o nome dos dias:all_visits_named. - Crie um mapper chamado
thresholdque testa se.xé maior que 100. - Crie
group_overmantendo os elementos que são maiores que 100. - Crie
group_underdescartando os elementos que são maiores que 100.
exercicio interativo prático
Tente este exercicio completando este código de exemplo.
# Set the name of each subvector
day <- c("mon", "tue", "wed", "thu", "fri", "sat", "sun")
all_visits_named <- ___(all_visits, ~ ___(.x, ___))
# Create a mapper that will test if .x is over 100
threshold <- ___
# Run this mapper on the all_visits_named object: group_over
group_over <- ___(all_visits_named, ~ ___(.x, ___))
# Run this mapper on the all_visits_named object: group_under
group_under <- ___(all_visits_named, ~ ___(.x, ___))