cannot coerce class '"rle"' into a data.frame
On Tue, Oct 16, 2012 at 7:07 PM, Marc Schwartz <marc_schwartz at me.com> wrote:
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':
Or just write one for general use: as.data.frame.rle <- function(x, ...) do.call(data.frame, x) I'd imagine the reason it doesn't already exist (since it is pretty transparent in this case) is simply because no one has never thought it was particularly necessary and the design of as.data.frame.default() reflects that it's better to fail loudly and early rather than hoping it will do the right thing when a specific is not supplied. Cheers, Michael
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
______________________________________________ R-help at r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.