Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Error: x must be atomic for 'sort.list'

Tags:

r

This is weird. I get this error

Error in sort.list(y) : 'x' must be atomic for 'sort.list'
Have you called 'sort' on a list?

when I execute this code on a list

 cc3 <- as.data.frame(table(cc2))

What could possibly be wrong?

this is a head of the list.

head(cc2)   
V1
1:    174
2:    174
3:    211
4: 177106
5: 177106
6: 177106 

Edit: When I run, str(cc2) I get this

Classes ‘data.table’ and 'data.frame':  149706 obs. of  1 variable:
$ V1:List of 149706
..$ : Named chr "174"
.. ..- attr(*, "names")= chr "V11"
..$ : Named chr "174"
 .. ..- attr(*, "names")= chr "V7"
 ..$ : Named chr "211"
  .. ..- attr(*, "names")= chr "V6"
 .. [list output truncated]
 - attr(*, ".internal.selfref")=<externalptr> 
like image 252
Rayan Sp Avatar asked Apr 12 '16 19:04

Rayan Sp


People also ask

How do I use the sort function in R?

To sort a data frame in R, use the order( ) function. By default, sorting is ASCENDING. Prepend the sorting variable by a minus sign to indicate DESCENDING order.

Is atomic in R?

atomic() function in R is used to check if an R object is atomic or not. When an R object is atomic it can be used to create atomic vectors. Note: R has six basic atomic vector types: logical, integer, real, complex, string (or character), and raw.


2 Answers

From the output of str(cc2), the variable inside of the data.table, V1, is itself a list. This means that cc2 is a nested list of length 1. The error is occurring because table calls sort.list, which requires an atomic vector as input.

Try using unlist:

cc3 <- as.data.frame(table(unlist(cc2)))

unlist will (recursively) extract elements from their list containers. So unlist(cc2) will return a vector, which works directly with table.

like image 196
lmo Avatar answered Nov 15 '22 23:11

lmo


I solved it by unlisting cc2 unli <- unlist(cc2) then converted it to df df<-as.data.frame(cc2)

like image 7
Rayan Sp Avatar answered Nov 16 '22 00:11

Rayan Sp