R sözdizimi biraz tuhaf görünebilir, özellikle de referans çerçeveniz hemen hemen başka herhangi bir programlama diliyse. R öğrenme yolculuğuna çıkarken anlamak için yararlı bulabileceğiniz dilin bazı olağandışı özellikleri şunlardır.
[This story is part of Computerworld‘s “Beginner’s guide to R.” To read from the beginning, check out the introduction; there are links on that page to the other pieces in the series.]
Değişkenlere değer atama
Bildiğim diğer programlama dillerinin çoğunda eşittir işareti bir değişkene belirli bir değer atar. Biliyorsunuz, x = 3, x’in artık 3 değerini elinde tuttuğu anlamına geliyor.
Ancak R’de birincil atama operatörü <-
de olduğu gibi:
x <- 3
Değil:
x = 3
Olası karışıklığa ek olarak, eşittir işareti aslında Yapabilmek çoğu zaman (hepsi değil) R’de atama operatörü olarak kullanılabilir.
Yeni başlayanlar için bununla başa çıkmanın en iyi yolu, tercih edilen atama operatörünü <- kullanmak ve eşittirlere her zaman izin verildiğini unutmak. tarafından tavsiye edilen tidyverse stil kılavuzu (tidyverse, son derece popüler paketlerden oluşan bir gruptur) – bu da aşağıdaki gibi kuruluşlar tarafından kullanılır: Google, R stili kılavuzu için — ve çoğu R kodunda göreceğiniz şey.
(Bu yeterince iyi bir açıklama değilse, sen ve gerçekten de R’nin 5 — evet, onları sayın, 5 — atama seçeneklerinin içini ve dışını bilmek istiyorsunuz. R kılavuzunun Atama Operatörleri sayfası.)
Yine de birkaç yerde eşittir işaretini göreceksiniz. Bunlardan biri, bir işlev oluştururken bir bağımsız değişkene varsayılan değerler atarken, örneğin
myfunction <- function(myarg1 = 10)
# some R code here using myarg1
Bir diğeri, bazı işlevler içindedir, örneğin dplyr paketinin mutasyona () işlevi (bir veri çerçevesindeki sütunları oluşturur veya değiştirir).
Değişkenler hakkında bir not daha: R, büyük/küçük harfe duyarlı bir dildir. Yani, x değişkeni X ile aynı değildir. Bu, R’deki hemen hemen her şey için geçerlidir; örneğin, işlev subset()
ile aynı olmaz Subset()
.
c birleştirmek (veya birleştirmek ve bazen dönüştürmek/zorlamak) içindir.
Çoğu programlama dilinde bir dizi oluşturduğunuzda, sözdizimi şuna benzer:
myArray = array(1, 1, 2, 3, 5, 8);
Veya:
int myArray = 1, 1, 2, 3, 5, 8;
Ya da belki:
myArray = [1, 1, 2, 3, 5, 8]
Yine de R’de fazladan bir parça var: Tek bir değişkene birden çok değer koymak için c()
işlev, örneğin:
my_vector <- c(1, 1, 2, 3, 5, 8)
bunu unutursan c()
, bir hata alırsınız. R’de başlarken, muhtemelen c() a’yı dışarıda bırakmakla ilgili hatalar göreceksiniz. çok güzelsin. (En azından kesinlikle yaptım.) Sonunda, pek düşünmediğiniz bir şey haline geliyor.
Ve şimdi bunun önemini vurguladım c()
işlevi, ben (isteksizce) size, bunu dışarıda bırakabileceğiniz bir durum olduğunu söyleyeceğim – aşağıdaki gibi, minimum ve maksimum arasında iki nokta üst üste olan bir aralıktaki ardışık değerlere atıfta bulunuyorsanız:
my_vector <- (1:10)
R eğitimlerinde ve metinlerinde bu tarzla biraz karşılaşmayı seveceksiniz ve c()
için gerekli olan bazı birden çok değer, ancak diğerleri değil. olmayacağını unutmayın acıtmak kullanmak için herhangi bir şey c()
bununla birlikte, gerekli olmasa bile, iki nokta üst üste ayrılmış bir aralıkla, örneğin:
my_vector <- c(1:10)
hakkında önemli bir nokta daha c()
function: Vektörünüzdeki her şeyin aynı veri türünden olduğunu varsayar – yani, tüm sayılar veya tüm karakterler. Aşağıdaki gibi bir vektör oluşturursanız:
my_vector <- c(1, 4, "hello", TRUE)
Olacaksın olumsuzluk iki tamsayı nesnesi, bir karakter nesnesi ve bir mantıksal nesne içeren bir vektöre sahip olun. Bunun yerine, c()
hepsini aynı nesne türüne, bu durumda tüm karakter nesnelerine dönüştürmek için elinden geleni yapacaktır. Yani my_vector “1”, “4”, “merhaba” ve “DOĞRU” içerecektir. Ayrıca düşünebilirsiniz c()
“dönüştürmek” veya “zorlamak” için.
Birden çok nesne türüyle bir koleksiyon oluşturmak için bir R’ye ihtiyacınız vardır. liste, bir vektör değil. ile bir liste oluşturursunuz. list()
işlev, değil c(),
Örneğin:
My_list <- list(1,4,"hello", TRUE)
Şimdi 1 sayısını, 4 sayısını, “merhaba” karakter nesnesini ve TRUE mantıksal nesnesini tutan bir değişkeniniz var.
R’deki vektör dizinleri 0’dan değil 1’den başlar
Çoğu bilgisayar dilinde, bir vektör, liste veya dizideki ilk öğe 0 öğesidir. R’de bu öğe 1’dir. my_vector[1] my_vector’daki ilk öğedir. Başka bir dilden geliyorsanız, bu ilk başta garip olacaktır. Ancak bir kez alıştığınızda, muhtemelen ne kadar kullanışlı ve sezgisel olduğunu anlayacaksınız ve neden daha fazla dilin bu daha insan dostu sistemi kullanmadığını merak edeceksiniz. Nihayet, insanlar 0’dan değil 1’den başlayan şeyleri sayın!
Döngüsüz döngüler
“For” ve “while” gibi döngülere sahip bir veri koleksiyonunu yinelemek, birçok programlama dilinin temel taşıdır. Yine de bu R yolu değil. R varken for, while ve tekrar döngülerikullanarak bir veri koleksiyonuna uygulanan işlemleri daha fazla göreceksiniz. uygulamak() işlevler veya mırıldanmak tidyverse paketi.
Ama önce, bazı temel bilgiler.
Aşağıdaki gibi bir sayı vektörünüz varsa:
my_vector <- c(7,9,23,5)
ve örneğin, yüzdelere dönüştürmek için her birini 0,01 ile çarpmak istiyorsunuz, bunu nasıl yapardınız? Hiç bir for, foreach veya while döngüsüne ihtiyacınız yok. Bunun yerine my_pct_vectors adında yeni bir vektör oluşturabilirsiniz:
my_pct_vector <- my_vector * 0.01
Bir vektör değişkeni üzerinde matematiksel bir işlem gerçekleştirmek, vektördeki her bir öğe arasında otomatik olarak döngü oluşturacaktır. Birçok R işlevi zaten vektörleştirilmiştir, ancak diğerleri değildir ve farkı bilmek önemlidir. if()
örneğin vektörleştirilmemiştir, ancak bir sürümü var ifelse()
yani.
Bir vektörde vektörleştirilmemiş bir işlev kullanmaya çalışırsanız, aşağıdaki gibi bir hata mesajı görürsünüz:
the condition has length > 1 and only the first element will be used
Bununla birlikte, tipik olarak veri analizinde, verilerinizdeki birden fazla öğeye işlevler uygulamak istersiniz: örneğin iş unvanına göre ortalama maaşı veya topluluğa göre mülk değerlerinin standart sapmasını bulmak. bu apply()
fonksiyon grubu ve taban R’de ve fonksiyonlar tidyverse purrr paketi bunun için tasarlanmıştır. R’yi eski kullanarak öğrendim kat paketi bunun için — ve bu paketi çok sevsem de, aslında kullanımdan kaldırıldı.
Apply ailesinde, ne tür bir veri nesnesine göre hareket edildiğine ve ne tür bir veri nesnesinin döndürüldüğüne bağlı olarak yarım düzineden fazla işlev vardır. “Bu işlevlerin, özellikle R’ye yeni başlayanlar için, tam olarak istediğiniz gibi çalışmasını sağlamak bazen sinir bozucu derecede zor olabilir” diyor. Revolution Analytics’te blog yazısıtemel R üzerinde katlama yaparken kurumsal sınıf R’ye odaklanan .
Eski düz apply()
her birinde bir işlev çalıştırır sıra veya her kolon tüm sütunların aynı veri tipinde olduğu 2 boyutlu bir matris veya veri çerçevesi. Satırlara göre uygulamak için 1 veya sütuna göre uygulamak için 2 bağımsız değişkenini ekleyerek satırlara göre mi yoksa sütunlara göre mi uygulayacağınızı belirtirsiniz. Örneğin:
apply(my_matrix, 1, median)
my_matrix içindeki her satırın medyanını döndürür ve
apply(my_matrix, 2, median)
her sütunun medyanını hesaplar.
lapply() veya tapply() gibi application() ailesindeki diğer işlevler, farklı girdi/çıktı veri türleri ile ilgilenir. Avustralyalı istatistiksel biyoinformatikçi Neal FW Saunders’ın güzel bir R’de uygulamak için kısa bir giriş Daha fazlasını öğrenmek ve bazı örnekler görmek isterseniz bir blog gönderisinde.
purrr, temel bir başlangıç kılavuzunun kapsamının biraz ötesindedir. Ama daha fazlasını öğrenmek istiyorsanız, şuraya gidin: purrr web sitesi ve/veya Jenny Bryan’ın purrr eğitim sitesi.
Kısaca R veri türleri (çok kısa)
hakkında bilgi edinmelisin Tümü R’nin veri türleri ve yeni başlayanlar için yarasadan nasıl davrandıkları? Amacınız bir R uzmanı olmaksa, evet, veri türlerinin içini ve dışını bilmelisiniz. Ancak benim varsayımım, karmaşık kod oluşturmak için dalmadan önce hızlı grafikler ve istatistikler üretmeyi denemek için burada olduğunuzdur.
Şimdilik aklınızda bulundurmanızı önereceğim şey şu: R’nin birden çok veri türü var. Bazıları özellikle temel veri çalışması yaparken önemlidir. Ve çoğu işlev, verilerinizin belirli bir tür ve yapıda olmasını gerektirir.
Daha spesifik olarak, R veri türleri tamsayı, sayısal, karakter ve mantıksal içerir. Eksik değerler NaN (bir matematiksel işlev düzgün çalışmıyorsa) veya NA (eksik veya kullanılamıyorsa) ile temsil edilir.
Önceki bölümde belirtildiği gibi, bir vektör aynı türden birden çok öğeyle, örneğin:
1, 5, 7
veya
"Bill", "Bob", "Sue"
A bekar sayı veya karakter dizisi Ayrıca a vektör — uzunluk 1 vektörü 73 veya “Computerworld.com’da R hakkında daha fazla bilgi edinin” gibi yalnızca bir değeri olan bir değişkenin değerine eriştiğinizde, bunu konsolunuzda, değer:
[1]
Bu size ekran çıktınızın bir numaralı vektör öğesinden başladığını söylüyor. Çok sayıda değer içeren bir vektörünüz varsa, çıktı birden çok satırda çalışırsa, her satır parantez içinde bir sayı ile başlayacak ve size o satırın hangi vektör öğesi numarasıyla başladığını söyleyecektir. (Aşağıdaki ekran görüntüsüne bakın.)
Daha önce de belirtildiği gibi, sayıları ve dizeleri veya sayıları ve DOĞRU/YANLIŞ türlerini karıştırmak istiyorsanız bir listeye ihtiyacınız vardır. (Bir liste oluşturmazsanız, (3, 8, “small”) içeren değişkeninizin bir karakter vektörüne (“3”, “8”, “small”) dönüştürülmesine şaşırabilirsiniz).
Bu arada, R, 3’ün 3.0 ile aynı sınıf olduğunu varsayıyor — sayısal (yani, ondalık noktalı). eğer istersen tam sayı 3, 3L olarak veya as.integer() işleviyle belirtmeniz gerekir. Bunun sizin için önemli olduğu bir durumda, ne tür bir numaranız olduğunu kontrol edebilirsiniz. class()
işlev:
class(3)
class(3.0)
class(3L)
class(as.integer(3))
Bir kaç tane var as()
dahil olmak üzere bir veri türünü diğerine dönüştürmek için işlevler as.character()
, as.list()
ve as.data.frame()
.
R ayrıca, matrisler ve veri çerçeveleri gibi verileri analiz ederken özellikle ilgi çekici olan özel veri türlerine sahiptir. Bir matrisin satırları ve sütunları vardır; dim() ile bir matris boyutu bulabilirsiniz, örneğin
dim(my_matrix)
Bir matrisin, her sütunda, her yerde sayılar gibi aynı veri türüne sahip olması gerekir.
Veri çerçeveleri çok daha yaygın olarak kullanılmaktadır. Bir sütunun başka bir sütundan farklı bir veri türüne sahip olabilmesi ve her sütunun bir adı olması dışında, matrislere benzerler. Bir veritabanı tablosu (veya iyi biçimlendirilmiş elektronik tablo tablosu) olarak işe yarayabilecek bir biçimde verileriniz varsa, muhtemelen bir R veri çerçevesi olarak da işe yarayacaktır.
Bu 2 boyutlu veri türünün bir eklenti paketi (pandalar) gerektirdiği Python’dan farklı olarak, veri çerçeveleri R’de yerleşiktir. uzatmak yine de R veri çerçevelerinin temel yetenekleri. bir, tibble tidyverse paketi, bazı ekstra özelliklerle temel veri çerçeveleri oluşturur. Bir diğeri, data.table, büyük veri kümelerini işlerken cayır cayır yanan hız için tasarlanmıştır. Veri tablosu nesnesinin parantezleri içinde çok sayıda işlevsellik ekler.
mydt[code to filter columns, code to create new columns, code to group data]
SQL biliyorsanız, birçok data.table size tanıdık gelecektir. data.table hakkında daha fazla bilgi için paket web sitesi veya bu tanıtım videosu:
Temel bir veri çerçevesiyle çalışırken, her satırı bir veritabanı kaydına ve her sütunu bir veritabanı alanı gibi düşünebilirsiniz. Temel R’ler gibi veri çerçevelerine uygulayabileceğiniz birçok kullanışlı işlev vardır. summary()
ve dplyr paketinin bakışı().
Temel R tuhaflıkları: Bir nesnenin temel alınan veri türünü bulmanın birkaç yolu vardır, ancak hepsi aynı değeri döndürmez. Örneğin, class()
ve str()
dönecek veri çerçevesi bir veri çerçevesi nesnesinde, ancak mode()
daha genel olanı döndürür liste.
R’deki veri türleri hakkında daha fazla ayrıntı öğrenmek istiyorsanız, Johns Hopkins Bloomberg Halk Sağlığı Okulu’nda biyoistatistik doçenti Roger Peng tarafından hazırlanan bu video dersini izleyebilirsiniz:
Bu bölümü tamamlamak için bir başka yararlı kavram daha — orada durun, neredeyse bitirdik: faktörler. bunlar temsil eder kategoriler verilerinizde. Dolayısıyla, çalışanlar, departmanları ve maaşları ile ilgili bir veri çerçeveniz varsa, maaşlar sayısal veriler ve çalışanlar karakter olacaktır (diğer birçok dilde dizeler); ama departmanın bir olmasını isteyebilirsiniz faktör — verilerinizi gruplamak veya modellemek isteyebileceğiniz bir kategori. Faktörler, departman gibi sırasız veya “fakir”, “orta”, “iyi” ve “mükemmel” gibi sıralı olabilir.
R komut satırı Unix kabuğundan farklıdır
R ortamında çalışmaya başladığınızda, Unix kabuğuna oldukça benziyor. Aslında, bazı R komut satırı eylemleri, bir Unix ortamından geliyorsanız beklediğiniz gibi davranır, ancak diğerleri yapmaz.
Son birkaç komutunuz arasında geçiş yapmak ister misiniz? Yukarı ok, R’de tıpkı Unix’te olduğu gibi çalışır — önceki komutları görmek için ona basmaya devam edin.
Liste işlevi, ls()
, size bir liste verecektir, ancak Unix’teki gibi dosyaların değil. Bunun yerine, mevcut R oturumunuzdaki nesnelerin bir listesini sağlayacaktır.
Mevcut çalışma dizininizi görmek ister misiniz? Unix’te kullanacağınız pwd sadece bir hata veriyor; istediğin şey getwd()
.
rm(my_variable)
geçerli oturumunuzdan bir değişkeni siler.