R ідентифікація об'єкта


119

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

Відповіді:


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, ви також можете спробувати methodsабо showMethods, showClassтощо. Патрік Бернс ' R Inferno має досить хороший розділ щодо цього (сек. №7).

EDIT : Дірк та Хедлі згадують 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% випадків.


2
str(x, max.level=1)може бути корисним, якщо x - багатошаровий ggplot!
PatrickT

7
str (UCTURE) важко запам'ятати, тому що я продовжую думати "рядок", але о, так корисно. Доведеться просто сказати структуру десять разів.
Дмитро

13

Якщо я отримаю 'someObject', скажіть через

someObject <- myMagicFunction(...)

то я зазвичай продовжую

class(someObject)
str(someObject)

який може супроводжуватися head (), підсумок (), print (), ..., залежно від класу у вас.


Щойно спробував str (obj). Шлях більше, ніж я очікував від представлення рядків; дуже акуратно! Дякую.
ars

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.