Como reparar em r: erro em sort.int(x, na.last, descendente, …): 'x' deve ser atômico


Uma mensagem de erro que você pode encontrar ao usar R é:

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

Este erro ocorre quando você tenta classificar uma lista.

Por padrão, R só é capaz de classificar objetos atômicos como vetores. Portanto, para usar sort() com uma lista, você deve primeiro usar a função unlist() .

O exemplo a seguir mostra como resolver esse erro na prática.

Como reproduzir o erro

Suponha que temos a seguinte lista em 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"

Agora suponha que tentamos classificar os valores na lista:

 #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

Recebemos um erro porque R não é capaz de classificar listas diretamente.

Como evitar o erro

Para evitar o erro, você deve primeiro usar a função unlist() da seguinte forma:

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

[1] 2 3 4 5 7 12 19

Observe que podemos classificar a lista de valores com êxito e sem erros porque primeiro usamos unlist() , que converteu a lista em um vetor numérico.

Por padrão, R classifica os valores em ordem crescente.

No entanto, podemos usar diminuing=TRUE para ordenar os valores em ordem decrescente:

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

[1] 19 12 7 5 4 3 2

Observe que os valores agora estão classificados em ordem decrescente.

Recursos adicionais

Os tutoriais a seguir explicam como corrigir outros erros comuns no R:

Como consertar em R: argumentos envolvem diferentes números de linhas
Como corrigir em R: erro na seleção de argumentos não utilizados
Como corrigir em R: argumentos inválidos
Como reparar em R: a substituição tem comprimento zero

Add a Comment

O seu endereço de email não será publicado. Campos obrigatórios marcados com *