İki R sorusu:
- Bir değişkenin türü (döndüren
typeof
) ile sınıfı (döndüren) arasındaki fark nedirclass
? Fark, örneğin C ++ dilindekine benzer mi? - Olası değişken türleri ve sınıfları nelerdir?
İki R sorusu:
typeof
) ile sınıfı (döndüren) arasındaki fark nedir class
? Fark, örneğin C ++ dilindekine benzer mi?Yanıtlar:
R'de her "nesne" a mode
ve 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, list
ancak data.frame
nesnelere 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
) mode
her 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 objects
de bazı örnekler olarak (faktörleri ve data.frames) mode
, typeof
ve class
her tip için ilişkilidir.
oldClass(matrix(1:10, 2,5)) # NULL
type
gerç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, class
R'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.