apply family of functions,
rapply is the unloved ginger stepchild. While
vapply make regular appearances in my code, and
tapply have occasional cameo appearances, in ten years of R coding, I’ve never once found a good use for
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(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
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.