Jak naprawić w r: błąd w sort.int(x, na.last, malejąco,…): „x” musi być niepodzielne


Komunikat o błędzie, który możesz napotkać podczas korzystania z R, to:

 Error in sort.int(x, na.last = na.last, decreasing = decreasing, ...): 
  'x' must be atomic

Ten błąd występuje podczas próby sortowania listy.

Domyślnie R może sortować tylko obiekty atomowe, takie jak wektory. Aby więc użyć sort() z listą, musisz najpierw użyć funkcji unlist() .

Poniższy przykład pokazuje, jak w praktyce rozwiązać ten błąd.

Jak odtworzyć błąd

Załóżmy, że mamy następującą listę w 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"

Załóżmy teraz, że próbujemy posortować wartości na liście:

 #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

Otrzymujemy błąd, ponieważ R nie jest w stanie bezpośrednio sortować list.

Jak uniknąć błędu

Aby uniknąć błędu, musisz najpierw użyć funkcji unlist() w następujący sposób:

 #sort values in list
sort(unlist(some_list))

[1] 2 3 4 5 7 12 19

Zauważ, że jesteśmy w stanie pomyślnie posortować listę wartości bez żadnych błędów, ponieważ najpierw użyliśmy unlist() , która przekonwertowała listę na wektor numeryczny.

Domyślnie R sortuje wartości w kolejności rosnącej.

Możemy jednak użyć malejącego=TRUE, aby posortować wartości w kolejności malejącej:

 #sort values in list in descending order
sort(unlist(some_list), decreasing= TRUE )

[1] 19 12 7 5 4 3 2

Zwróć uwagę, że wartości są teraz posortowane w kolejności malejącej.

Dodatkowe zasoby

Poniższe samouczki wyjaśniają, jak naprawić inne typowe błędy w R:

Jak naprawić w R: argumenty obejmują różną liczbę linii
Jak naprawić w R: błąd w wyborze nieużywanych argumentów
Jak naprawić w R: nieprawidłowe argumenty
Jak naprawić w R: wymiana ma zerową długość

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *