[R] cannot coerce class '"rle"' into a data.frame

Marc Schwartz marc_schwartz at me.com
Tue Oct 16 20:07:58 CEST 2012


On Oct 16, 2012, at 12:54 PM, Sam Steingold <sds at gnu.org> wrote:

> why?
> 
>> rle
> Run Length Encoding
>  lengths: int [1:1650061] 2 2 8 2 4 5 6 3 26 46 ...
>  values : chr [1:1650061] "4bbf9e94cbceb70c BG bg" "4fbbf2c67e0fb867 SK sk" ...
>> as.data.frame(rle)
> Error in as.data.frame.default(vertices.rle) : 
>  cannot coerce class '"rle"' into a data.frame
> 
> it seems that
> 
> rle.df <- data.frame(values=rle$values,length=rle$length)
> 
> works and DTRT.



It is telling you that there is not an as.data.frame() method for objects of class 'rle':

x <- rev(rep(6:10, 1:5))

RES <- rle(x)

> str(RES)
List of 2
 $ lengths: int [1:5] 5 4 3 2 1
 $ values : int [1:5] 10 9 8 7 6
 - attr(*, "class")= chr "rle"


Since 'RES' is a list with a class attribute, you can unclass() it and then coerce to a data.frame:

> as.data.frame(unclass(RES))
  lengths values
1       5     10
2       4      9
3       3      8
4       2      7
5       1      6

> str(as.data.frame(unclass(RES)))
'data.frame':	5 obs. of  2 variables:
 $ lengths: int  5 4 3 2 1
 $ values : int  10 9 8 7 6


Regards,

Marc Schwartz




More information about the R-help mailing list