Değişken türleri ve sınıfları


85

İki R sorusu:

  1. Bir değişkenin türü (döndüren typeof) ile sınıfı (döndüren) arasındaki fark nedir class? Fark, örneğin C ++ dilindekine benzer mi?
  2. Olası değişken türleri ve sınıfları nelerdir?

Bu ilgili gönderi yararlı bilgiler de sağlayabilir: stackoverflow.com/questions/8855589/…
Dominic Comtois

Yanıtlar:


96

R'de her "nesne" a modeve a'ya sahiptir class. İlki, bir nesnenin bellekte nasıl saklandığını (sayısal, karakter, liste ve işlev) temsil ederken, daha sonra soyut türünü temsil eder. Örneğin:

d <- data.frame(V1=c(1,2))
class(d)
# [1] "data.frame"
mode(d)
# [1] "list"
typeof(d)
# list

Gördüğünüz gibi veri çerçeveleri bellekte saklanır, listancak data.framenesnelere sarılır . İkincisi, üye işlevlerin kullanımına ve printözel bir davranış gibi aşırı yükleme işlevlerine izin verir .

typeof( storage.mode) modeher zaman olmamakla birlikte genellikle aynı bilgileri verir . Konuşma konusu olan mesele:

typeof(c(1,2))
# [1] "double"
mode(c(1,2))
# [1] "numeric"

Bunun arkasındaki mantık burada bulunabilir :

R'ye özgü işlev typeof , bir R nesnesinin türünü döndürür

İşlev modu , Becker, Chambers ve Wilks (1988) anlamında bir nesnenin modu hakkında bilgi verir ve S dilinin diğer uygulamalarıyla daha uyumludur.

Yukarıdaki yayınlanan bağlantı, aynı zamanda, tüm doğal R bir listesini içerir basic types(vektörler, listeleri gibi) ve compound objectsde bazı örnekler olarak (faktörleri ve data.frames) mode, typeofve classher tip için ilişkilidir.


1
"R'de her" nesne ", S4 OOP sınıfı yapı perspektifinden bakıldığı sürece bir moda ve bir sınıfa" sahiptir. S3'te, nesnelere sınıf adları atanmış olmayabilir:oldClass(matrix(1:10, 2,5)) # NULL
Erdoğan CEVHER

6

typegerçekten R'de bulunan farklı veri yapılarına atıfta bulunur. R Dili Tanımlama kılavuzundaki bu tartışma , nesneler ve türler hakkında başlamanıza yardımcı olabilir.

Öte yandan, classR'de beklediğinizden başka bir şey ifade eder. Gönderen R Dil Tanımı (R sürümü ile birlikte gelen) kılavuzuna:

2.2.4 Sınıflar

R , esas olarak sınıf özelliği aracılığıyla kontrol edilen ayrıntılı bir sınıf sistemine 1 sahiptir . Bu nitelik, bir nesnenin miras aldığı sınıfların listesini içeren bir karakter vektörüdür. Bu, R'deki "genel yöntemler" işlevselliğinin temelini oluşturur.

Bu özniteliğe, kullanıcılar tarafından neredeyse kısıtlama olmaksızın erişilebilir ve manipüle edilebilir. Bir nesnenin, sınıf yöntemlerinin beklediği bileşenleri gerçekten içerip içermediğinin kontrolü yoktur. Bu nedenle, sınıf özniteliğini değiştirirken dikkatli olunmalı ve mevcut olduklarında özel oluşturma ve zorlama işlevleri tercih edilmelidir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.