Visualizzazione dei risultati da 1 a 2 su 2

Discussione: linguaggio r problema

  1. #1
    Utente di HTML.it L'avatar di el92
    Registrato dal
    Dec 2014
    Messaggi
    177

    linguaggio r problema

    buona serata a tutti..sto imparando da poco il linguaggio r ,per statistica.
    Ho riscontrato un problema effettuando un esercizio:

    codice:
    giornimalattia <- c(2,2,0,0,5,8,3,4,1,0,0,7,1,7,1,5,4,0,4,0 )
    names(giornimalattia) <- c("Lav_0","Lav_1", "Lav_2", "Lav_3", "Lav_4", "Lav_5", "Lav_6", "Lav_7", "Lav_8", "Lav_9", "Lav_10", "Lav_11", "Lav_12", "Lav_13" , "Lav_14", "Lav_15", "Lav_16","Lav_17", "Lav_18", "Lav_19")
    giornimalattia
    #Selezionare il numero di giorni di malattia di "Lav_6"
    giornimalattia ["Lav_6"]
    #Determinare quanti lavoratori hanno fatto 0 giorni di malattia e stamparne i codici
    lunghezza <- length(giornimalattia)
    for(i in 1:lunghezza){
      if(giornimalattia[i]==0){
        print(giornimalattia[i])
      }
      
    }
    #Estrarre il sottovettore contenente i giorni di malattia di tutti i lavoratori eccetto
    #"Lav_2" e "Lav_11"
    for(i in 1:lunghezza){
      if(giornimalattia[i]!=giornimalattia["Lav_2"]){
        print(giornimalattia[i])
      }
      
    }
    Il problema è nella riga di codice:
    codice:
    #Estrarre il sottovettore contenente i giorni di malattia di tutti i lavoratori eccetto
    #"Lav_2" e "Lav_11"
    for(i in 1:lunghezza){
      if(giornimalattia[i]!=giornimalattia["Lav_2"] & giornimalattia[i]!=giornimalattia["Lav_11"]){
        print(giornimalattia[i])
      }
      
    }
    questo mi da il seguente output:
    codice:
    Lav_0 
        2 
    Lav_1 
        2 
    Lav_4 
        5 
    Lav_5 
        8 
    Lav_6 
        3 
    Lav_7 
        4 
    Lav_8 
        1 
    Lav_11 
         7 
    Lav_12 
         1 
    Lav_13 
         7 
    Lav_14 
         1 
    Lav_15 
         5 
    Lav_16 
         4 
    Lav_18 
         4
    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? Come andrebbe modificato il mio codice, affinchè compaiono giorni di malattia di tutti i lavoratori eccetto "Lav_2" e "Lav_11".

  2. #2
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,691
    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.

    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?
    Questa la condizione:
    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.

    Come andrebbe modificato il mio codice, affinchè compaiono giorni di malattia di tutti i lavoratori eccetto "Lav_2" e "Lav_11".
    Ripeto, non conosco R ma da qualche veloce ricerca una soluzione potrebbe essere impostare la condizione in un modo del genere:
    codice:
    if( names(giornimalattia)[i] != "Lav_2" && names(giornimalattia)[i] != "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.
    Ultima modifica di KillerWorm; 06-12-2018 a 00:32
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.