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 programlama dilleri çizimi

Coddy ile kodlamayı öğren

Başla