Come riparare in r: errore in sort.int(x, na.last, descending, …): 'x' deve essere atomico
Un messaggio di errore che potresti riscontrare quando usi R è:
Error in sort.int(x, na.last = na.last, decreasing = decreasing, ...): 'x' must be atomic
Questo errore si verifica quando provi a ordinare un elenco.
Per impostazione predefinita, R è in grado di ordinare solo oggetti atomici come vettori. Quindi, per usare sort() con una lista, devi prima usare la funzione unlist() .
L’esempio seguente mostra come risolvere questo errore nella pratica.
Come riprodurre l’errore
Supponiamo di avere la seguente lista in R:
#create list
some_list <- list(c(4, 3, 7), 2, c(5, 12, 19))
#view list
some_list
[[1]]
[1] 4 3 7
[[2]]
[1] 2
[[3]]
[1] 5 12 19
#view class
class(some_list)
[1] "list"
Supponiamo ora di provare a ordinare i valori nell’elenco:
#attempt to sort the values in the list
sort(some_list)
Error in sort.int(x, na.last = na.last, decreasing = decreasing, ...):
'x' must be atomic
Riceviamo un errore perché R non è in grado di ordinare direttamente gli elenchi.
Come evitare l’errore
Per evitare l’errore, devi prima utilizzare la funzione unlist() come segue:
#sort values in list
sort(unlist(some_list))
[1] 2 3 4 5 7 12 19
Tieni presente che siamo in grado di ordinare correttamente l’elenco di valori senza errori perché abbiamo prima utilizzato unlist() , che ha convertito l’elenco in un vettore numerico.
Per impostazione predefinita, R ordina i valori in ordine crescente.
Tuttavia, possiamo usare diminuzione=TRUE per ordinare i valori in ordine decrescente:
#sort values in list in descending order
sort(unlist(some_list), decreasing= TRUE )
[1] 19 12 7 5 4 3 2
Tieni presente che i valori sono ora ordinati in ordine decrescente.
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 risolvere in R: argomenti non validi
Come riparare in R: la sostituzione ha lunghezza zero