Promemoria di rinnovo
Una catena di palestre manda ogni mese un messaggio ai soci con l’abbonamento in scadenza, per ricordare di rinnovarlo. Il messaggio però non va mandato a tutti: chi ha già rinnovato in anticipo si irrita a ricevere il sollecito, e chi ha negato il consenso ai messaggi commerciali non può essere contattato, per legge.
Dal gestionale escono tre elenchi di codici tessera: i soci in scadenza questo mese, i soci che hanno già rinnovato (anche in anticipo di mesi, quindi non tutti sono in scadenza) e i soci che non vogliono essere contattati. Il responsabile marketing vuole sapere quanti messaggi partiranno, per comprare il pacchetto di SMS giusto.
Scrivi la funzione promemoria(in_scadenza, rinnovati, non_contattare) che restituisce quanti soci vanno avvisati, usando %in% per sapere se un codice è in un elenco e ! per tenere quelli che non ci sono. La verifica chiama la tua funzione con gli elenchi di ogni caso.
in_scadenzavettore di testi — codici tessera dei soci con l'abbonamento in scadenza questo meserinnovativettore di testi — codici tessera di chi ha già rinnovatonon_contattarevettore di testi — codici tessera di chi ha negato il consenso ai messaggi
messaggi numero — quanti promemoria mandare
promemoria- Un socio riceve il promemoria se è in
in_scadenza, non è inrinnovatie non è innon_contattare. Basta essere in uno dei due elenchi per essere escluso. in_scadenza %in% rinnovatidà unTRUEper ogni socio che ha già rinnovato;!rovescia iTRUEinFALSEe viceversa.- Gli elenchi
rinnovatienon_contattarepossono contenere anche codici che non sono in scadenza: non contano. - Puoi selezionare i soci da avvisare con le parentesi quadre e contarli con
length(), oppure scorrerein_scadenzacon un ciclofore un contatore. - La funzione restituisce il numero con
return().
| in_scadenza | rinnovati | non_contattare | messaggi |
|---|---|---|---|
| T01T02T03T04 | T02 | T04 | 2 |
| T10T11T12 | T10T11T12 | T99 | 0 |
Soluzione
| caso | in_scadenza | rinnovati | non_contattare | atteso | ottenuto |
|---|
promemoria <- function(in_scadenza, rinnovati, non_contattare){
# TRUE per chi va escluso, in ciascuno dei due elenchi
ha_rinnovato <- in_scadenza %in% rinnovati
senza_consenso <- in_scadenza %in% non_contattare
# si avvisa chi NON ha rinnovato E NON ha negato il consenso
da_avvisare <- in_scadenza[!ha_rinnovato & !senza_consenso]
return(length(da_avvisare))
}
promemoria(c("T01", "T02", "T03", "T04"), c("T02"), c("T04")) # 2