13
votes

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> 
3
Every time I see an error like that, I know it either has something to do with my not understanding the data structure or not understanding what type of data structure the function requires.lmo

3 Answers

17
votes

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.

7
votes

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

0
votes

I just needed unlist(myList) for a list I constructed with iterative a list I constructed by index (myList[[i]] <- val) to be able to apply my comparison function of choice (median)