Identifikasi objek R.

119

Saya sering berakhir dengan fungsi yang menghasilkan keluaran yang saya tidak mengerti jenis data keluarannya. Saya mengharapkan daftar dan akhirnya menjadi daftar daftar atau bingkai data atau sesuatu yang lain. Apa metode atau alur kerja yang baik untuk mengetahui tipe data keluaran saat pertama kali menggunakan suatu fungsi?

JD Long
sumber

Jawaban:

126

Saya biasanya memulai dengan beberapa kombinasi dari:

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

yang sesuai berdasarkan apa yang terungkap. Misalnya, coba dengan:

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.

Jika objadalah S3 atau S4 objek, Anda juga dapat mencoba methodsatau showMethods, showClass, dll Patrick Burns R Inferno memiliki bagian yang baik cantik di ini (detik # 7).

EDIT : Dirk dan Hadley menyebutkan str(obj)dalam jawaban mereka. Ini benar-benar jauh lebih baik daripada yang di atas untuk mengintip cepat dan bahkan mendetail ke suatu objek.

ars
sumber
1
Saya tidak berpikir saya berhasil sejauh itu melalui R Inferno. Terima kasih telah mengirim saya kembali ke sana.
JD Long
3
Jika Anda belum melihatnya, "Objek S4 dalam 15 halaman atau kurang" [ stat.auckland.ac.nz/S-Workshop/Gentleman/S4Objects.pdf ] adalah bacaan bagus lainnya (dengan detail selengkapnya).
ars
Saya tidak melihat itu. Terima kasih untuk tautannya. Itu sepadan dengan harga tiket masuknya. :)
JD Long
Saya telah membuat fungsi utilitas kecil yang mengkodekan saran ini. Lihat tellMeAboutThis.r
eludom
65
str(x)

Itu saja yang perlu Anda ingat untuk 99% kasus.

hadley
sumber
2
str(x, max.level=1)dapat berguna jika x adalah ggplot berlapis-lapis!
PatrickT
7
str (UCTURE) sulit untuk diingat, karena saya terus memikirkan "string" tapi oh, sangat berguna. Hanya harus mengatakan STRUKTUR sepuluh kali.
Dmitri
13

Jika saya mendapatkan 'someObject', katakan via

someObject <- myMagicFunction(...)

maka saya biasanya melanjutkan

class(someObject)
str(someObject)

yang dapat diikuti oleh head (), summary (), print (), ... tergantung pada kelas yang Anda miliki.

Dirk Eddelbuettel
sumber
Baru saja mencoba str (obj). Jauh lebih dari yang saya harapkan dari representasi string; sangat rapi! Terima kasih.
ars
9
attributes(someObject) 

Bisa juga bermanfaat

Josh Reich
sumber