Идентификация объекта R

120

Я часто получаю функцию, производящую вывод, для которой я не понимаю тип выходных данных. Я ожидаю список, и в итоге он окажется списком списков, фреймом данных или чем-то еще. Какой хороший метод или рабочий процесс для определения типа выходных данных при первом использовании функции?

JD Long
источник

Ответы:

127

Обычно я начинаю с некоторой комбинации:

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и т.д. Патрик Бернс R Inferno имеет довольно хороший раздел на этом (сек # 7).

РЕДАКТИРОВАТЬ : Дирк и Хэдли упоминают str(obj)в своих ответах. Это действительно намного лучше, чем что-либо из вышеперечисленного для быстрого и даже детального взгляда на объект.

АРС
источник
1
Не думаю, что я продвинулся так далеко через R Inferno. Спасибо, что отправили меня туда.
JD Long
3
Если вы его еще не видели, «Объекты S4 на 15 страницах или меньше» [ stat.auckland.ac.nz/S-Workshop/Gentleman/S4Objects.pdf ] - еще одно хорошее чтение (с более подробной информацией).
ars
Я этого не видел. Спасибо за ссылку. Это стоило входной платы. :)
JD Long
Я создал небольшую служебную функцию, которая кодирует это предложение. Смотрите tellMeAboutThis.r
eludom
65
str(x)

Это все, что вам нужно помнить в 99% случаев.

Hadley
источник
2
str(x, max.level=1)может быть полезно, если x - многослойный ggplot!
PatrickT
7
str (UCTURE) трудно запомнить, потому что я все время думаю о «струне», но, о, так полезно. Просто нужно будет сказать «СТРУКТУРА» десять раз.
Дмитрий
13

Если я получу someObject, скажите через

someObject <- myMagicFunction(...)

тогда я обычно продолжаю

class(someObject)
str(someObject)

за которым могут следовать head (), summary (), print (), ... в зависимости от вашего класса.

Дирк Эддельбюттель
источник
Только что попробовал str (obj). Намного больше, чем я ожидал от строкового представления; очень аккуратный! Спасибо.
ars
9
attributes(someObject) 

Также может быть полезно

Джош Райх
источник