Come risolvere il problema: il numero di righe nel risultato non è un multiplo della lunghezza del vettore (arg 1)


Un messaggio di avviso che potresti incontrare quando usi R è:

 Warning message:
In cbind(A, B, C):
  number of rows of result is not a multiple of vector length (arg 1)

Questo avviso si verifica in genere quando si tenta di utilizzare la funzione cbind() per associare colonne di vettori di diversa lunghezza.

Tieni presente che questo messaggio è semplicemente un avviso e il tuo codice continuerà a essere eseguito, ma i risultati ottenuti potrebbero essere diversi da quelli previsti.

L’esempio seguente mostra come evitare questo avviso nella pratica.

Come riprodurre l’avviso

Supponiamo di utilizzare la funzione cbind() per unire tre vettori insieme in colonne in un frame di dati:

 #define three vectors with different lengths
A = c(4, 2, 3, 6)
B = c(9, 1, 8, 7, 0, 7)
C = c(3, 5, 3, 3, 6, 4)

#column bind three vectors into data frame
df <- cbind(A, B, C)

#view data frame
df

Warning message:
In cbind(A, B, C):
  number of rows of result is not a multiple of vector length (arg 1)
     ABC
[1,] 4 9 3
[2,] 2 1 5
[3,] 3 8 3
[4,] 6 7 3
[5,] 4 0 6
[6,] 2 7 4

La funzione cbind funziona con tutti e tre i vettori, ma tieni presente che i valori del primo vettore si ripetono semplicemente ancora e ancora.

Questo si chiama “riciclaggio” in R.

Come evitare l’avviso

Per evitare completamente questo avviso, dobbiamo assicurarci che la lunghezza di ciascuno dei vettori che utilizziamo sia la stessa.

Un modo per ottenere ciò è riempire i valori mancanti nel vettore più corto con valori NA come segue:

 #calculate max length of vectors
max_length <- max(length(A), length(B), length(C))

#set length of each vector equal to max length
length(A) <- max_length                      
length(B) <- max_length
length(C) <- max_length 

#cbind the three vectors together into a data frame
df <- cbind(A, B, C)

#view data frame
df

      ABC
[1,] 4 9 3
[2,] 2 1 5
[3,] 3 8 3
[4,] 6 7 3
[5,] NA 0 6
[6,] NA 7 4

Tieni presente che questa volta non riceviamo alcun messaggio di avviso e i valori dei vettori brevi vengono semplicemente riempiti con valori NA per garantire che ciascuno dei tre vettori che abbiamo utilizzato abbia la stessa lunghezza.

Risorse addizionali

I seguenti tutorial spiegano come correggere altri errori comuni in R:

Come risolvere in R: gli argomenti coinvolgono un numero diverso di righe
Come risolvere in R: errore nella selezione di argomenti inutilizzati
Come riparare in R: la sostituzione ha lunghezza zero

Aggiungi un commento

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