Ciao, non conosco R ma ho fatto qualche prova su questo editor per analizzare la logica del tuo codice e cercare di capire cosa non va.
Sono arrivato alla conclusione che in quella condizione stai eseguendo un confronto tra i valori di quell'oggetto (giornimalattia) mentre dovresti farlo tra i relativi nomi.
Questa la condizione:nell'output non compaiono "Lav_2" e "Lav_11", come voluto dal problema,ma non ci sono nemmeno "Lav_10" e "Lav_3". Perchè succede cio?
.codice:if(giornimalattia[i]!=giornimalattia["Lav_2"] & giornimalattia[i]!=giornimalattia["Lav_11"])
che tradotto in italiano significa:
.codice:se il valore giornimalattia[i] non è uguale al valore giornimalattia["Lav_2"] e il valore giornimalattia[i] non è uguale al valore giornimalattia["Lav_11"]
Analizzando questa condizione nel contesto del ciclo avviene questo:
iterazione 1 -> se 2 non è 0 e 2 non è 7 (VERO) quindi stampa Lav_0
iterazione 2 -> se 2 non è 0 e 2 non è 7 (VERO) quindi stampa Lav_1
iterazione 3 -> se 0 non è 0 e 0 non è 7 (FALSO) quindi escludi Lav_2
iterazione 4 -> se 0 non è 0 e 0 non è 7 (FALSO) quindi escludi Lav_3
iterazione 5 -> se 5 non è 0 e 5 non è 7 (VERO) quindi stampa Lav_4
iterazione 6 -> se 8 non è 0 e 8 non è 7 (VERO) quindi stampa Lav_5
ecc.
Capisci da te che la logica è sbagliata. Se vuoi escludere gli elementi in base ai loro nomi dovrai appunto confrontarne i nomi e non i valori.
Ripeto, non conosco R ma da qualche veloce ricerca una soluzione potrebbe essere impostare la condizione in un modo del genere:Come andrebbe modificato il mio codice, affinchè compaiono giorni di malattia di tutti i lavoratori eccetto "Lav_2" e "Lav_11".
Vedi se può andare, poi magari ci possono essere anche dei metodi più opportuni (pensando ad altri linguaggi di programmazione) per eseguire direttamente un filtro su una lista di elementi.codice:if( names(giornimalattia)[i] != "Lav_2" && names(giornimalattia)[i] != "Lav_11")


Rispondi quotando