R物体识别


119

我经常以产生输出的函数结束,而该函数不了解其输出数据类型。我期望有一个列表,它最终是列表列表,数据框或其他内容。首次使用函数时,找出输出数据类型的好方法或工作流程是什么?

Answers:


126

我通常从以下几种组合开始:

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

根据显示的内容进行适当调整。例如,尝试:

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)

..等等。

如果obj是S3或S4对象,则也可以尝试methodsshowMethodsshowClass等帕特里克伯恩斯- [R地狱对这个相当不错的部分(秒#7)。

编辑:德克和哈德利str(obj)在回答中提及。确实比上面的任何一个都要好得多,它可以使您快速,甚至详细地查看对象。


1
我不认为我通过R Inferno做到了那么远。感谢您送我回去。
JD 2009年

3
如果您还没有看过它,那么请阅读“ statistics。auckland.ac.nz/S-Workshop/Gentleman/S4Objects.pdf ”(不超过 15页)。
ars

我没有看到。感谢您的链接。这值得入场的代价。:)
JD 2009年

我创建了一个小实用程序函数来编码此建议。参见tellMeAboutThis.r
享乐

65
str(x)

这是您在99%的情况下需要记住的所有内容。


2
str(x, max.level=1)如果x是多层ggplot,则很有用!
PatrickT

7
str(UCTURE)很难记住,因为我一直在想“字符串”,但是,它非常有用。只能说结构十次。
德米特里(Dmitri)

13

如果我得到“ someObject”,请通过

someObject <- myMagicFunction(...)

然后我通常会继续

class(someObject)
str(someObject)

可以跟在head(),summary(),print()等后面,具体取决于您所拥有的类。


刚刚尝试过str(obj)。比我从字符串表示中预期的方式要多得多;井井有条!谢谢。
ars

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.