Mode, Kelas dan Jenis objek R


39

Saya bertanya-tanya apa perbedaan antara Mode, Kelas dan Jenis objek R? Jenis objek R dapat diperoleh berdasarkan fungsi typeof (), mode per mode (), dan kelas per kelas ().

Juga ada fungsi dan konsep serupa lainnya yang saya lewatkan?

Terima kasih dan salam!


2
str (variabel) adalah teman terbaik Anda.
Brandon Bertelsen

2
Lihat juga R: Jenis dan kelas pertanyaan variabel pada Stack Overflow.
Leo

Jawaban:


21

Yang class()digunakan untuk mendefinisikan / mengidentifikasi apa "tipe" sebuah objek dari sudut pandang pemrograman berorientasi objek di R. Jadi untuk

> x <- 1:3
> class(x)
[1] "integer"

fungsi generik apa pun yang memiliki metode "integer" akan digunakan.

typeof()memberikan "tipe" objek dari sudut pandang R, sementara mode()memberikan "tipe" objek dari sudut pandang Becker, Chambers & Wilks (1988). Yang terakhir mungkin lebih kompatibel dengan implementasi S lainnya menurut manual Definisi Bahasa R.

Saya mungkin akan berbuat salah di sisi menggunakan typeof()dalam banyak kasus kecuali itu untuk melewati objek R untuk mengkompilasi kode, di mana storage.mode()akan berguna.

Ini bermanfaat dibahas dalam Definisi Bahasa R sebagaimana ditautkan dengan di atas.


3
Mengapa ada begitu banyak sudut pandang? Saya tidak melihat manfaat selain kebingungan.
smwikipedia

1
@smwikipedia karena R memiliki warisan yang mencakup S-Plus dan S dan bahasa yang terakhir berkembang seiring waktu. Juga, ada kebutuhan untuk membedakan antara objek yang dapat dibuat pengguna dan tipe objek dasar.
Pasang kembali Monica - G. Simpson

@smwikipedia karena begitulah R. Untuk alasan yang sama kita miliki <-dan =untuk penugasan variabel.
Andre Terra

9

Dari: https://www.mail-archive.com/r-help@r-project.org/msg17169.html :

'mode' adalah klasifikasi objek yang saling eksklusif menurut struktur dasarnya. Mode 'atom' bersifat numerik, kompleks, berkarakter, dan logis. Objek rekursif memiliki mode seperti 'daftar' atau 'fungsi' atau beberapa lainnya. Objek memiliki satu dan hanya satu mode.

'class' adalah properti yang ditugaskan ke objek yang menentukan bagaimana fungsi generik beroperasi dengannya. Ini bukan klasifikasi yang saling eksklusif. Jika suatu objek tidak memiliki kelas khusus yang ditugaskan padanya, seperti vektor numerik sederhana, kelasnya biasanya sama dengan modenya, dengan konvensi.

Mengubah mode suatu objek sering disebut 'paksaan'. Mode suatu objek dapat berubah tanpa harus mengubah kelas.


1

Perbedaan utama antara kelas dan typeof adalah bahwa yang pertama dapat didefinisikan oleh pengguna, tetapi tipe tidak bisa. Misalnya, tentukan daftar

> x<-list("a",c(1,2))

> # x is a list
> class(x)
[1] "list"
> # class can be user defined
> class(x)<-"newclass"
> class(x)
[1] "newclass"

> typeof(x)
[1] "list"
# you cannot assign a different type using typeof()
> typeof(x)<-"newclass"
Error in typeof(x) <- "newclass" : could not find function "typeof<-" 

Untuk memberikan nama kelas tertentu ke objek yang ditentukan pengguna sangat berguna untuk menulis program. Hal ini memungkinkan untuk menandai objek yang ditentukan pengguna dengan cara yang mirip dengan apa yang terjadi dalam bahasa pemrograman berorientasi objek.


Menurut Rdokumentasi untuk typeofdan class, pernyataan tentang "perbedaan utama" tidak benar. classadalah atribut dari objek yang dapat ditetapkan terlepas dari mode penyimpanan internalnya, sementara "typeof menentukan tipe (R internal) atau mode penyimpanan dari objek apa pun." Satu menggambarkan karakteristik logis sedangkan yang lain adalah karakteristik fisik dari suatu objek.
whuber
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.