Menu

R Veri Türleri: numeric, character, logical (typeof ve class)

R'deki atomik veri türleri - double, integer, character, logical - ayrıca typeof() ile class() arasındaki fark ve dönüştürme ile zorlamanın nasıl işlediği.

Bu sayfada çalıştırılabilir editörler var - düzenle, çalıştır ve sonucu anında gör.

R'deki Veri Türleri

R'deki her değer, küçük bir atomik tür kümesinden birine sahiptir. İşin neredeyse tamamını dördü yapar:

  • double - ondalık sayılar: 3.14, -2, 1e6. R'nin "numeric" ile kastettiği budur ve yazdığınız her sayının varsayılanıdır.
  • integer - tam olarak saklanan, L sonekiyle yazılan tam sayılar: 42L.
  • character - tırnak içindeki metin: "hello".
  • logical - TRUE ve FALSE doğruluk değerleri (artı eksik değer NA - bkz. eksik değerler).

Ara sıra karşınıza çıkan sinyal işleme matematiği için bir de complex (2 + 3i) vardır; ona ihtiyaç duymadan yıllar geçirebilirsiniz. typeof() size bir değerin hangi türde olduğunu söyler:

İlk satıra dikkat: sade bir sayı, tam sayı gibi görünse bile bir double'dır. typeof(42) "double"'dır; yalnızca 42L bir integer'dır. Günlük analizde bu fark nadiren önemlidir - R aralarında sessizce dönüşüm yapar - ama typeof() çıktısındaki başka türlü kafa karıştırıcı pek çok şeyi açıklar.

typeof() ve class(): Neden Ayrışırlar

R'de ikisi de "bu nedir?" sorusunu yanıtlıyormuş gibi görünen iki fonksiyon vardır ve aslında ince biçimde farklı sorular yanıtlarlar.

  • typeof() saklama türünü bildirir: değerin bellekte nasıl durduğunu.
  • class() davranış türünü bildirir: R'nin metot çağırırken, örneğin hangi print veya summary çalışacağına karar vermek için kullandığı etiketi.

Basit değerlerde yanıtlar yalnızca sözcük olarak ayrışır:

typeof() double (saklama), class() ise numeric (davranış) der. Yapılarda arayı açılır:

Matris, düz bir integer vektörü olarak saklanır, ama bir matris gibi davranır - R'ye onu bir ızgara olarak yazdırmasını söyleyen şey class()'tır. Aynı ayrım veri çerçevelerinde (typeof "list" der, class "data.frame" der) ve tarihlerde (typeof "double" der, class "Date" der) de görülür.

Pratik kural: bir şeyin gündelik anlamda ne olduğunu öğrenmek istediğinizde class(), R'nin perde arkasında ne yaptığında hata ayıklarken typeof() kullanın.

is.*() ile Tür Kontrolü

Her türün, TRUE veya FALSE döndüren eşleşen bir yüklemi vardır - girdisini doğrulaması gereken fonksiyonların içinde kullanışlıdır:

Bilmeye değer bir tuzak: is.numeric(), hem double hem integer için TRUE'dur (ikisi de sayıdır), ama is.integer() saklamayı kontrol eder, dolayısıyla sade bir 42 için FALSE verir:

Matematiksel anlamda apaçık bir tam sayı olan bir değer için is.integer(7) sonucunun FALSE çıkmasına şaşırdıysanız - sebebi budur. 7 bir double'dır; 7L bir integer'dır.

as.*() ile Tür Dönüştürme

Açık dönüşüm, hedef tür başına bir fonksiyon içeren as.* ailesini kullanır:

Hatırlanması gereken iki davranış var. as.integer() yuvarlamak yerine sıfıra doğru kırpar - 7.9, 7 olur. Ve bir dönüşüm anlamsız olduğunda R hata fırlatmaz; NA döndürüp bir uyarı yayar:

Bunu çalıştırın; NA ile birlikte bir "NAs introduced by coercion" uyarısı görürsünüz. Bu gerçekten faydalıdır - dağınık metinden oluşan bütün bir sütunu sayıya çevirin, ayrıştırılamayan girdiler betiğinizi çökertmek yerine NA olur - ama aynı zamanda sessiz bir NA'nın verinize sızabileceği anlamına gelir. Bir dönüşüm önem taşıyorsa sonrasında yeni NA var mı diye bakın.

Mantıksal değerler, sayılara ve sayılardan umduğunuz gibi dönüşür: as.numeric(TRUE) 1'dir, as.logical(0) FALSE'tur. Bir logical vektörün sum() değerinin TRUE'ları saymasının nedeni budur:

Örtük Zorlama: Vektörler İçin Tek-Tür Kuralı

R'de atomik bir vektör yalnızca tek bir tür tutabilir. Karışık değerleri c() ile birleştirin; R sabit bir merdiveni izleyerek her şeyi mevcut en esnek türe sessizce yükseltir:

logical → integer → double → character

Mantıksal değerler 1 ve 0 oldu, integer'lar double'a dönüştü ve son satırda her şey metne dönüştü - character her zaman kazanır, çünkü herhangi bir değer bir metin olarak yazılabilir. typeof() ile doğrulayabilirsiniz:

Zorlama, "sütunum neden metin oldu?" hatalarının bir numaralı kaynağıdır: sayılardan oluşan bir sütunda başıboş tek bir "N/A" metni tüm vektörü character'a zorlar. Bu olduğunda önce sorunlu değeri düzeltin, sonra as.numeric() ile geri dönüştürün.

Buradan Ne Çıkarıyorsunuz

  • Dört ana tür: double ("numeric"), integer (42L), character, logical.
  • typeof() = nasıl saklandığı; class() = nasıl davrandığı. 3.14, numeric gibi davranan bir double'dır.
  • is.numeric() ve arkadaşlarıyla kontrol edin; as.numeric() ve arkadaşlarıyla dönüştürün - başarısız dönüşümler hata değil, uyarıyla birlikte NA verir.
  • Vektörler yalnızca tek bir tür tutar; karıştırmak logical → integer → double → character sırasıyla zorlama yapar.

Sırada: sayısal türlere daha yakından bir bakış - yuvarlama, matematik fonksiyonları ve her dilin paylaştığı kayan nokta sürprizleri.

Sıkça Sorulan Sorular

R'deki temel veri türleri nelerdir?

Atomik türler şunlardır: double (ondalık sayılar, R'nin "numeric" dediği şey), integer (42L gibi L sonekiyle yazılan tam sayılar), character (tırnak içinde metin), logical (TRUE/FALSE) ve nadiren kullanılan complex. Daha büyük olan her şey - vektörler, veri çerçeveleri, listeler - bunlardan inşa edilir.

R'de typeof() ile class() arasındaki fark nedir?

typeof() bir değerin bellekte nasıl saklandığını (düşük düzeyli türünü) bildirir; class() ise değerin nasıl davrandığını bildirir ve R'nin hangi metodu çağıracağını bu belirler. Sade bir ondalık sayı için sözcük düzeyinde ayrışırlar - typeof(3.14) "double", class(3.14) ise "numeric"'tir - veri çerçevesi gibi yapılarda ise typeof() "list", class() "data.frame" der.

R'de türler nasıl dönüştürülür?

as.* ailesini kullanın: as.numeric("3.5") 3.5 verir, as.character(42) "42" verir, as.integer(7.9) ise 7'ye kırpar. Dönüşüm mümkün olmadığında R hata vermez, NA döndürüp uyarı üretir - as.numeric("abc") sonucu NA'dır.

R'de zorlama (coercion) nedir?

Tek bir vektörde farklı türleri birleştirdiğinizde R sessizce her şeyi en esnek türe dönüştürür; sıra şudur: logical → integer → double → character. Yani c(1, 2, "three") bir character vektörü olur: "1" "2" "three".

Coddy programming languages illustration

Coddy ile kodlamayı öğren

BAŞLA