Class ve typeof Kavramları

Class ve typeof Kavramları

R programlama dili, veri analizi ve istatistiksel hesaplamalarda güçlü ve esnek bir yapı sunar. Bu esnekliğin temelinde, R’ın değişkenleri ve veri yapıları hakkında tutarlı bir tür yönetim sistemi bulunur. R’da bir nesnenin türünü veya sınıfını öğrenmek için en sık kullanılan iki fonksiyon typeof()
ve class() fonksiyonlarıdır. Bu iki fonksiyon genellikle karıştırılsa da, aslında R nesnelerinin farklı düzeylerdeki yapısal bilgilerini temsil eder.

Class Fonksiyonu Nedir?

class() fonksiyonu, bir nesnenin R’ın nesne yönelimli sisteminde hangi sınıfa ait olduğunu belirtir.
Bu, nesnenin davranışlarını (örneğin, hangi metodların uygulanabileceğini) belirlemede kullanılır.

class() fonksiyonu ise bir nesnenin yüksek seviyeli (high-level abstraction) sınıfını döndürür. Bu sınıflar, genellikle R’daki nesne yönelimli programlama (OOP) sisteminin bir parçasıdır ve bir nesnenin hangi “davranışa” sahip olduğunu gösterir.

Örneğin, bir veri çerçevesi (data.frame) ya da faktör (factor) değişkeni, temel düzeyde benzer veri tiplerine sahip olabilir ancak farklı sınıflara (classes) sahiptir. Bu sınıflar, nesnelerin nasıl işlendiğini, hangi fonksiyonlara nasıl tepki verdiğini belirler.

Örnek 1: Basit Veri Tipleri

x <- 5
class(x)
# Çıktı: "numeric"

y <- TRUE
class(y)
# Çıktı: "logical"

z <- "Merhaba"
class(z)
# Çıktı: "character"

Örnek 2: Veri Yapıları

v <- c(1, 2, 3)
class(v)
# Çıktı: "numeric"

df <- data.frame(a = 1:3, b = c("A", "B", "C"))
class(df)
# Çıktı: "data.frame"

m <- matrix(1:6, nrow = 2)
class(m)
# Çıktı: "matrix", "array"

class() çıktısı genellikle birden fazla sınıf döndürebilir. Örneğin matrix nesnesi hem “matrix” hem de “array” sınıfına aittir. Bu, R’ın çoklu kalıtım (multiple inheritance) sistemini yansıtır.

Örnek 3: Numeric – Data Frame – Factor

x <- 42
class(x)
# [1] "numeric"

df <- data.frame(a = 1:3, b = c("X", "Y", "Z"))
class(df)
# [1] "data.frame"

f <- factor(c("Male", "Female", "Female"))
class(f)
# [1] "factor"

Burada:

  • x değişkeninin sınıfı numeric’tir.
  • df bir data.frame sınıfına aittir.
  • f ise factor sınıfındadır.

Typeof Fonksiyonu Nedir?

typeof() fonksiyonu, bir nesnenin temel veri türünü (low-level storage type) döndürür. Bu fonksiyon, R’ın bellekte nesneyi nasıl sakladığını ve hangi temel veri yapısına sahip olduğunu belirtir.

Başka bir deyişle, typeof() R’ın dil düzeyinde (internal representation) kullandığı veri tipini gösterir. Bu bilgi, özellikle bellek yönetimi, performans optimizasyonu ve düşük seviyeli işlemler (örneğin C/C++ entegrasyonu) açısından önemlidir.

Örnek 1:

x <- 42
typeof(x)
# [1] "double"

y <- "R Studio"
typeof(y)
# [1] "character"

z <- TRUE
typeof(z)
# [1] "logical"

Bu örneklerde görüldüğü gibi:

  • x bir double türünde sayısal veridir.
  • y bir character türünde metin verisidir.
  • z bir logical (mantıksal) türde veridir.

class() ve typeof() Arasındaki Temel Fark

Özelliktypeof()class()
DüzeyDüşük seviye (low-level)Yüksek seviye (high-level)
AmaçNesnenin bellekteki temel türünü döndürür.Nesnenin davranışını belirleyen sınıf bilgisini döndürür.
Kullanım AlanıSistem içi, performans ve bellek analizi.Kullanıcı tanımlı fonksiyonlar, modelleme, OOP yapıları.
Örnek Sonuç“double”, “integer”, “character”“numeric”, “data.frame”, “factor”
OOP ile İlişkiNesne yönelimli sistemden bağımsızdır.OOP sisteminin bir parçasıdır.

typeof() bir nesnenin temel veri tipini (low-level storage mode) döndürür.

class() ise o nesnenin yüksek seviye soyutlamasını (object-oriented class) belirtir.

Birlikte Kullanım ve Yorumlama

R’da bir nesnenin hem class hem de typeof bilgisini anlamak, veri analizi süreçlerinde hata ayıklama ve veri dönüşümleri açısından kritik öneme sahiptir.

typeof() fonksiyonu, bir nesnenin bellekte nasıl saklandığını ifade eder. Yani, bir nesnenin R’ın içsel sisteminde hangi veri tipiyle temsil edildiğini söyler.

Örnek 1: Basit Veri Tipleri

x <- 5
typeof(x)
# Çıktı: "double"

y <- TRUE
typeof(y)
# Çıktı: "logical"

z <- "Merhaba"
typeof(z)
# Çıktı: "character"

Not: R’da sayılar varsayılan olarak “double” türünde saklanır.
Eğer özel olarak as.integer() kullanmazsanız, tam sayılar bile “double” olarak değerlendirilir.

Örnek 2:

df <- data.frame(a = 1:3, b = c("X", "Y", "Z"))
typeof(df)
# [1] "list"

class(df)
# [1] "data.frame"

Burada dikkat edilmesi gereken nokta şudur:

  • data.frame nesnesi, yüksek seviyede bir tablo yapısı gibi davranır.
  • Ancak düşük seviyede, bir liste (list) olarak saklanır.

Bu durum, R’daki veri yapılarının esnekliğini ve katmanlı doğasını açıkça ortaya koyar.

Örnek 3: Karmaşık Veri Tipleri

v <- c(1, 2, 3)
typeof(v)
# Çıktı: "double"

df <- data.frame(a = 1:3, b = c("A", "B", "C"))
typeof(df)
# Çıktı: "list"

m <- matrix(1:6, nrow = 2)
typeof(m)
# Çıktı: "integer"

Burada dikkat edilmesi gereken önemli bir nokta:
Bir data.frame aslında R’da liste yapısına dayanır. typeof() fonksiyonu da bu düşük seviye yapıyı döndürür.

Sonuç

R programlama dilinde typeof() ve class() fonksiyonları, bir nesnenin farklı yönlerini anlamamıza olanak tanır.

  • typeof() fonksiyonu, nesnenin bellekteki teknik yapısını gösterirken,
  • class() fonksiyonu, nesnenin programlama bağlamındaki davranış biçimini açıklar.

Veri analizi süreçlerinde bu iki kavramın doğru anlaşılması, veri türleri arasında dönüşüm yaparken oluşabilecek hataları önler ve fonksiyonların beklenen biçimde çalışmasını sağlar.

Örnek: Aynı Nesneye İki Farklı Açıdan Bakmak

df <- data.frame(ID = 1:3, Name = c("Ali", "Ayşe", "Mehmet"))

typeof(df)
# Çıktı: "list"

class(df)
# Çıktı: "data.frame"

Bu örnekte:

  • typeof() fonksiyonu, data.frame’in aslında liste yapısına dayandığını gösterir.
  • class() fonksiyonu ise data.frame’in yüksek seviyede bir veri çerçevesi nesnesi olduğunu belirtir.

Yani, typeof() bize “R bu nesneyi bellekte nasıl tutuyor?” sorusunun cevabını verirken,
class() “R bu nesneye hangi davranışları atamış?” sorusunu yanıtlar.

Senaryolar

1. Fonksiyon Geliştirirken Tür Kontrolü

my_summary <- function(x) {
  if (class(x) == "data.frame") {
    return(summary(x))
  } else {
    stop("Bu fonksiyon sadece data.frame nesneleri için geçerlidir.")
  }
}

my_summary(iris)

2. Veri Tipi Dönüştürmede

x <- 1:5
typeof(x)   # integer
x <- as.double(x)
typeof(x)   # double

3. Nesne Yapısının Derin İncelemesi

str(iris)          # Nesne yapısını gösterir
typeof(iris)       # "list"
class(iris)        # "data.frame"

class() ve typeof() fonksiyonları, R’ın veri yapısını iki farklı düzeyde anlamamızı sağlar:

  • typeof() → R’ın “bellek düzeyinde” nesneyi nasıl temsil ettiğini gösterir.
  • class() → R’ın “nesne yönelimli sisteminde” o nesneye hangi davranışları atadığını belirtir.

Bu iki fonksiyonun birlikte kullanılması, özellikle veri bilimi ve istatistiksel modelleme süreçlerinde daha güvenilir, esnek ve hatasız kod yazmanızı sağlar.

Eğer R Programını indirmek isterseniz buraya tıklayınız : R: The R Project for Statistical Computinghttps://www.r-project.org/

Eğer R Studio Programını indirmek isterseniz buraya tıklayınız: RStudio Desktop – Posithttps://posit.co/download/rstudio-desktop/

Eğitimlerimize katılarak bu ve diğer projeleri uygulamalı olarak öğrenebilirsiniz. Eğitimlerimize ve diğer bilgilere buradaki linkten (https://www.facadium.com.tr/) ulaşabilirsiniz. Detaylı bilgi için lütfen bizlere 0553 377 29 28 numaralı telefondan ya da info@facadium.com.tr mail adresinden ulaşınız.