In the apply
family of functions, rapply
is the unloved ginger stepchild. While lapply
, sapply
and vapply
make regular appearances in my code, and apply
and tapply
have occasional cameo appearances, in ten years of R coding, I’ve never once found a good use for rapply
.
Maybe once a year I take a look at the help page, decide it looks to complicated, and ignore the function again. So today I was very pleased to have found a genuine use for the function. It isn’t life-changing, but it’s quite cute.
Complex classes often have a print method that hides their internals. For example, regression models created by glm
are lists with thirty elements, but their print method displays only the call, the coefficients and a few statistics.
# From example(glm) utils::data(anorexia, package = "MASS") anorex.1 <- glm(Postwt ~ Prewt + Treat + offset(Prewt), family = gaussian, data = anorexia) str(anorex.1)
To see everything, you need to use unclass
.
unclass(anorex.1) #many pages of output
unclass
has a limitation: it only removes the top level class, so subelements keep their classes. For example, compare:
class(unclass(anorex.1)$qr) # qr class(unclass(anorex.1$qr)) # list
Using rapply
, we can remove classes throughout the whole of the object, turning it into a list of simple objects.
rapply(anorex.1, unclass, how = "replace")
As well as allowing us to thoroughly inspect the contents of the object, it also allows the object to be used with other code that doesn’t understand particular classes.
Tagged: r, rapply, recursive, stats Image may be NSFW.
Clik here to view.

Clik here to view.
