R nesnesinin Modu, Sınıfı ve Türü


39

Mode, Class ve R tipi objeler arasındaki farkların ne olduğunu merak ediyordum. Bir R nesnesinin tipi, typeof () fonksiyonu, mode by mode () ve class by class () ile elde edilebilir.

Ayrıca özlediğim diğer benzer fonksiyonlar ve kavramlar?

Teşekkürler ve saygılar!


2
str (değişken) en iyi arkadaşındır.
Brandon Bertelsen

2
Ayrıca bkz. R: Yığın Taşması ile ilgili değişken türleri ve sınıfları .
Leo

Yanıtlar:


21

class()/ Tanımlamak bir nesne R. So nesne yönelimli programlama açısından için gelen ne "tip" tanımlamak için kullanılır

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

"integer" metoduna sahip herhangi bir jenerik fonksiyon kullanılacaktır.

typeof()“nesne tipini” R'nin bakış açısından mode()verirken, “nesne tipini” Becker, Chambers & Wilks (1988) bakış açısından verir. Sonuncusu, R Dil Tanımına göre diğer S uygulamaları ile daha uyumlu olabilir. kılavuzuna .

Muhtemelen typeof()çoğu durumda R nesnelerini derlenmiş koda geçirmediği sürece kullanma yanına gelirdim.storage.mode() faydalı olacaktır.

Bu, R Dilim Tanımında yukarıda belirtildiği gibi faydalı bir şekilde tartışılmıştır.


3
Neden bu kadar çok bakış açısı var? Karışıklıktan başka fayda göremiyorum.
smwikipedia

1
@smwikipedia çünkü R, S-Plus ve S'yi içeren bir mirasa sahip ve bu ikinci dil zaman içinde gelişti. Ayrıca, kullanıcıların oluşturabileceği nesneler ve temel nesne türleri arasında bir ayrım yapılması gerekir.
Monica'yı eski durumuna getirme - G. Simpson,

@smwikipedia çünkü bu tam olarak R. Elimizdeki Aynı nedenle <-ve =değişken atama için.
Andre Terra

9

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

'mode', nesnelerin temel yapılarına göre birbirini dışlayan bir sınıflandırmasıdır. 'Atomik' modlar sayısal, karmaşık, karakter ve mantıksaldır. Özyinelemeli nesnelerde 'liste' veya 'işlev' gibi modlar veya birkaç diğerleri. Bir nesnenin bir ve sadece bir modu vardır.

'class', genel işlevlerin onunla nasıl çalışacağını belirleyen bir nesneye atanan bir özelliktir. Karşılıklı bir sınıflandırma değildir. Bir nesnenin kendisine atanmış basit bir sayısal vektörü gibi belirli bir sınıfı yoksa, sınıf, kural olarak genellikle kendi moduyla aynıdır.

Bir nesnenin modunu değiştirmeye genellikle 'zorlama' denir. Bir nesnenin modu mutlaka sınıfı değiştirmeden değişebilir.


1

Sınıf ve typeof arasındaki temel fark, ilk kullanıcı tarafından tanımlanabilir, ancak tür olamaz. Örneğin, bir liste tanımlayın

> 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<-" 

Kullanıcı tanımlı bir nesneye belirli bir sınıf adı vermek programları yazmak için çok yararlıdır. Kullanıcı tanımlı nesneleri, nesne yönelimli programlama dillerinde olanlara benzer şekilde etiketlemeye izin verir.


RBelgelerine göre typeofve class"ana fark" ile ilgili iddia yanlıştır. classdahili depolama modundan bağımsız olarak atanabilecek bir nesnenin niteliğidir, "typeof ise herhangi bir nesnenin (R dahili) türünü veya depolama modunu belirler". Biri mantıksal bir özelliği tanımlarken, diğeri bir nesnenin fiziksel bir özelliğidir.
whuber
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.