Come risolvere il problema: la lunghezza dell'oggetto maggiore non è un multiplo della lunghezza dell'oggetto minore
Un messaggio di avviso comune che potresti incontrare in R è:
Warning message: In a + b: longer object length is not a multiple of shorter object length
Questo messaggio di avviso viene visualizzato quando si tenta di eseguire un’operazione su due o più vettori che non hanno la stessa lunghezza.
Questo tutorial condivide i passaggi esatti che puoi utilizzare per risolvere questo messaggio di avviso.
Come riprodurre il messaggio di avviso
Supponiamo di sommare i valori dei seguenti due vettori in R:
#define two vectors a <- c(1, 2, 3, 4, 5) b <- c(6, 7, 8, 9, 10) #add the two vectors a+b [1] 7 9 11 13 15
Il vettore risultante mostra la somma dei valori corrispondenti in ciascun vettore.
Non abbiamo ricevuto alcun messaggio di avviso poiché i due vettori hanno la stessa lunghezza.
Supponiamo tuttavia che il secondo vettore abbia un valore in meno rispetto al primo:
#define two vectors a <- c(1, 2, 3, 4, 5) b <- c(6, 7, 8, 9) #add the two vectors a+b [1] 7 9 11 13 11 Warning message: In a + b: longer object length is not a multiple of shorter object length
Poiché i due vettori hanno lunghezze diverse, otteniamo che la lunghezza dell’oggetto maggiore non è un multiplo del messaggio di avviso sulla lunghezza dell’oggetto minore .
È importante notare che R forza sempre il calcolo a funzionare aggiungendo l’ultimo valore del primo vettore (5) con il primo valore del secondo vettore (6) per ottenere il valore finale di 11 .
Se non conosciamo la lunghezza di ciascun vettore, possiamo utilizzare la funzione length() per scoprirla:
#display length of vector a length(a) [1] 5 #display length of vector b length(b) [1] 4
Vediamo che il primo vettore ha 5 valori mentre il secondo vettore ha solo 4 valori. Questo è il motivo per cui riceviamo un messaggio di avviso.
Come risolvere il messaggio di avviso
Per correggere questo messaggio di avviso, dobbiamo semplicemente assicurarci che entrambi i vettori abbiano la stessa lunghezza.
Ad esempio, se sappiamo che il vettore ba ha un valore inferiore al vettore a, allora possiamo semplicemente aggiungere uno zero alla fine del vettore b :
#define two vectors a <- c(1, 2, 3, 4, 5) b <- c(6, 7, 8, 9) #add zero to the end of vector b b <- c(b, 0) #add the two vectors a+b [1] 7 9 11 13 5
Nella maggior parte dei casi, in realtà non conosciamo la differenza di lunghezza tra i due vettori, quindi possiamo utilizzare il seguente ciclo for per aggiungere il numero corretto di zeri alla fine del vettore più corto:
#define two vectors a <- c(1, 2, 3, 4, 5) b <- c(6, 7) #add zeros to the end of vector b for (i in (( length (b)+1): length (a))) +{b = c(b, 0)} #add the two vectors a+b [1] 7 9 11 13 5
Il messaggio di avviso scompare perché abbiamo aggiunto abbastanza zeri alla fine del vettore b per garantire che i due vettori abbiano la stessa lunghezza.
Risorse addizionali
I seguenti tutorial spiegano come risolvere altri errori comuni in R:
Come risolvere il problema in R: i nomi non corrispondono ai nomi precedenti
Come risolvere in R: NA introdotte dalla coercizione
Come riparare in R: indice fuori limite
Come risolvere in R: i contrasti possono essere applicati solo a fattori con 2 o più livelli