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

Aggiungi un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *