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
2009-07-24 14:31:39
Just tried str(obj). Way more than I expected from a string representation; very neat! Thanks.
ars
2009-07-26 21:36:01
+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
2009-07-24 15:00:44
i don't think I made it that far through R Inferno. Thanks for sending me back there.
JD Long
2009-07-24 20:50:36
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
2009-07-24 23:02:34
I had not see that. Thanks for the link. That was worth the price of admission. :)
JD Long
2009-07-26 01:16:35