我经常遇到一个函数产生的输出数据类型让我摸不着头脑。我期望得到的是一个列表,但最终它变成了一个嵌套列表、数据框或其他什么东西。在首次使用一个函数时,有什么好的方法或工作流程能够确定其输出数据类型呢?
我通常会从一些组合开始:
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对象,可以尝试使用methods
或 showMethods
,showClass
等方式。Patrick Burns的R地狱有一个非常好的章节关于此问题(第7节)。
编辑:Dirk和Hadley在他们的回答中提到str(obj)
, 它确实比上述任何一种方式都更适合快速甚至详细地查看对象。str(x)
在99%的情况下,这就是你需要记住的全部。
str(x, max.level=1)
可能会很有用! - PatrickTstr(x)
返回Named num [1:10] 1.555 8.424 .... -attr(*,"names")= chr [1:10] "x1" "x2" ...
,这是什么意思?这是一个带名称的原子向量吗? - Jamesstr()
似乎没有暴露这个信息。 - James如果我通过某种方式获取了 'someObject',比如:
someObject <- myMagicFunction(...)
那么我通常会继续进行以下步骤:
class(someObject)
str(someObject)
根据您所拥有的类别,可以使用head()、summary()、print()等后续函数。
attributes(someObject)
也可以很有用