tags:

views:

258

answers:

4

I am often ending up with a function producing output for which I don't understand the output data type. I'm expecting a list and it ends up being a list of lists or a data frame or something else. What's a good method or workflow for figuring out the output data type when first using a function?

+3  A: 

If I get 'someObject', say via

someObject <- myMagicFunction(...)

then I usually proceed by

class(someObject)
str(someObject)

which can be followed by head(), summary(), print(), ... depending on the class you have.

Dirk Eddelbuettel
Just tried str(obj). Way more than I expected from a string representation; very neat! Thanks.
ars
+3  A: 
attributes(someObject)

Can also be useful

Josh Reich
+4  A: 

I usually start out with some combination of:

typeof(obj)
class(obj)
sapply(obj, class)
sapply(obj, attributes)
attributes(obj)
names(obj)

as appropriate based on what's revealed. For example, try with:

obj <- data.frame(a=1:26, b=letters)
obj <- list(a=1:26, b=letters, c=list(d=1:26, e=letters))
data(cars)
obj <- lm(dist ~ speed, data=cars)

..etc.

If obj is an S3 or S4 object, you can also try methods or showMethods, showClass, etc. Patrick Burns' R Inferno has a pretty good section on this (sec #7).

EDIT: Dirk and Hadley mention str(obj) in their answers. It really is much better than any of the above for a quick and even detailed peek into an object.

ars
i don't think I made it that far through R Inferno. Thanks for sending me back there.
JD Long
In case you haven't seen it already, "S4 objects in 15 pages or less" [ http://www.stat.auckland.ac.nz/S-Workshop/Gentleman/S4Objects.pdf ] is another good read (with more details).
ars
I had not see that. Thanks for the link. That was worth the price of admission. :)
JD Long
+4  A: 
str(x)

It's all you need to remember for 99% of cases.

hadley