Tarifler: Temel Komutlar
R öğrenirken veya kod yazarken bazı temel işlemlerin nasıl yapıldığını unutabiliyoruz. Bunun için internette cheat sheet olarak adlandırılan bir iki sayfalık hatırlatma notları bulmak mümkün. Ancak bazen daha etraflı bir anlatıma ihtiyaç duyabiliyoruz. Tarifler serisini bu amaçla hazırladım. Bazısı önceki notlarımda da bulunan temel R bilgilerini derli toplu bir biçimde Tarifler serisinde bulabilirsiniz. Bu tarifleri hazırlarken büyük ölçüde Paul Teetor’un R Cookbook kitabından faydalandım.
- Değişken ve ifadelerin değerlerini nasıl öğrenirim?
- Değişkenlere nasıl değer atarım?
- Tanımlı değişkenleri nasıl listelerim?
- Tanımlı değişkenleri nasıl silerim?
- Nasıl yeni bir vektör oluştururum?
- Nasıl dizi oluştururum?
- Vektör içeriğini diğer bir vektörle yahut değerle nasıl karşılatırırım?
- Vektör elemanlarını nasıl seçerim?
- Vektörleri aritmetik işlemlerde nasıl kullanırım?
- Operatörler arasındaki öncelik sıralaması nasıldır?
- Kendi fonksiyonumu nasıl tanımlarım?
Değişken ve ifadelerin değerlerini nasıl öğrenirim?
Değişkenin adını yazıp ENTER tuşuna basarak veya print fonksiyonuyla değişkenin değerini görebilirsiniz.
x <- 0.289
y <- matrix(rnorm(4,0,1),2,2)
x
## [1] 0.289
print(x)
## [1] 0.289
y
## [,1] [,2]
## [1,] -1.470333 0.0574465
## [2,] -0.351294 -1.6092788
print(y)
## [,1] [,2]
## [1,] -1.470333 0.0574465
## [2,] -0.351294 -1.6092788
Aslında değişkenin ismini yazıp ENTER tuşuna bastığımızda R print fonksiyonunu çağırdığından her iki işlemde de aynı çıktıyı almaktayız.
Lakin print fonksiyonu yalnızca bir girdi alabilmektedir. Mesela aşağıdaki komut beklenen sonucu vermeyecektir:
print(x,y)
Hatta aşağıdaki gibi daha okunaklı bir çıktı almak istersek hata mesajıyla karşılaşırız:
print("x değişkeninin değeri:",x,", y değişkeninin değeri:",y)
Bu işlem için cat fonksiyonunu kullanabiliriz:
cat("x değişkeninin değeri:",x,", y değişkeninin değeri:",y, "\n")
## x değişkeninin değeri: 0.289 , y değişkeninin değeri: -1.470333 -0.351294 0.0574465 -1.609279
cat fonksiyonu halihazırda liste (list) veri tipini görüntülememektedir.
Değişkenlere nasıl değer atarım?
R’da değişkeni tanımlama ihtiyacı yoktur. Değer atamak için <- operatörünü kullanırız.
x <- 0.289
Tanımladığınız değişkenler R çalışma ortamına (workspace) kaydedilecektir. R tanımladığınız bir değişkeni herhangi biçimde korumamaktadır. Yani numerik olarak tanımladığınız bir değişkeni sonradan karaktere dönüştürmeniz halinde R sıkıntı çıkarmaz. Bu durum bazı hallerde hatalara sebebiyet verebildiğinden değişkenleri kendiniz denetlemelisiniz.
x <- 0.289
x
## [1] 0.289
x <- c("a", "b", "c")
x
## [1] "a" "b" "c"
Bazı durumlarda değişkenleri çalışmakta olduğumuz ortama (workspace) değil de global çalışma ortamına (global environment) kaydetmemiz gerekebilir. Bu durumda <<- operatörünü kullanırız.
Bunlara ilaveten R, -> operatörü ile atama yapılacak değişkeni sağa yazılmasına izin verir. Aynı şekilde = operatörü ile de değişkenlere atama yapılabilir. Ancak bu iki operatör pek kullanılmamaktadır:
sqrt(11) -> x
y = abs(11)
x
## [1] 3.316625
y
## [1] 11
Tanımlı değişkenleri nasıl listelerim?
Çalışma ortamında tanımlı değişkenleri ls fonksiyonuyla listeleyebiliriz.
ls()
## [1] "x" "y"
x <- 23.33
y <- "elma"
z <- list(q = c(1,2,3), w= c("a","b","c"))
ls()
## [1] "x" "y" "z"
Tanımlı herhangi bir değişken yoksa character(0), yani büyüklüğünde string vektörü gelir. Tanımlı değişken varsa isimleri gelir. Değişkenlerle ilgili daha detaylı bilgiye ls.str fonksiyonu ile ulaşılabilir:
ls.str()
## x : num 23.3
## y : chr "elma"
## z : List of 2
## $ q: num [1:3] 1 2 3
## $ w: chr [1:3] "a" "b" "c"
Çalışma ortamında gizli değişkenler olabilir. Bunlar all.names = TRUE parametresiyle ulaşabiliriz:
ls(all.names = TRUE)
## [1] ".Random.seed" "x" "y" "z"
Nokta ile başlayan değişkenler gizli değişkendir.
Tanımlı değişkenleri nasıl silerim?
Değişkenleri rm fonksiyonuyla sileriz.
a <- 1
b <- 2
c <- 3
ls()
## [1] "a" "b" "c" "x" "y" "z"
rm(a)
ls()
## [1] "b" "c" "x" "y" "z"
rm(b,c)
ls()
## [1] "x" "y" "z"
Çalışma ortamındaki tüm değişkenleri silmek için rm fonksiyonunu aşağıdaki parametreyle kullanırız:
ls()
## [1] "x" "y" "z"
rm(list=ls())
ls()
## character(0)
Nasıl yeni bir vektör oluştururum?
Vektör R dilinin en basit ve en kullanışlı veri tipidir. Vektör oluşturmak için c() fonksiyonunu kullanırız. Vektörler rakam, metin veya mantıksal değerler içerebilir.
a <- c(1,2,3,4.08,5.374)
b <- c("a", "pi", "x", "q")
c <- c("TURE", "FALSE","FALSE")
c() parametre olarak vektör alması halinde aldığı vektörleri birleştirir. Vektörler varklı veri türleri içeremez. Farklı veri türlerinden vektör yapılması halinde R hepsini aynı veri türü haline getirir:
d <- c(a,b)
str(d)
## chr [1:9] "1" "2" "3" "4.08" "5.374" "a" "pi" "x" "q"
c() sadece vektörler değil diğer veri türleriyle de işlem yapabilir. Fakat sonuç beklediğiniz gibi çıkmayabileceğinden mutlaka kontrol edilmelidir.
Nasıl dizi oluştururum?
En basit biçimde n:m formatıyla sayı dizisi oluşturabiliriz. Bu şekilde birer birer artan bir seri elde ederiz:
0:7
## [1] 0 1 2 3 4 5 6 7
7:0
## [1] 7 6 5 4 3 2 1 0
Farklı aralık değerine sahip dizi için seq fonksiyonu kullanılır:
seq(from = 7, to = 31, by = 3)
## [1] 7 10 13 16 19 22 25 28 31
length.out parametresiyle dizinin uzunluğunu belirleyebiliriz, aralık değerini R hesaplar:
seq(from = 0, to = 100, length.out = 5)
## [1] 0 25 50 75 100
Belli sayı veya sayıları tekrar etmek için rep fonksiyonu kullanılır:
rep(3, times = 5)
## [1] 3 3 3 3 3
rep(3:6, times = 3)
## [1] 3 4 5 6 3 4 5 6 3 4 5 6
rep(c(1,4,9), times = 3)
## [1] 1 4 9 1 4 9 1 4 9
rep("x", times = 3)
## [1] "x" "x" "x"
Vektör içeriğini diğer bir vektörle yahut değerle nasıl karşılatırırım?
R karşılaştırma operatörleri olan ==, !=, <, >, <=, >= ile vektörleri veya değişkenleri karşılaştırabiliriz. Karşılaştırma sonucu her vektör elemanı için bir mantıksal değer görüntülenir.
a <- 3
a == pi
## [1] FALSE
a != pi
## [1] TRUE
a < pi
## [1] TRUE
a > pi
## [1] FALSE
a <= pi
## [1] TRUE
a >= pi
## [1] FALSE
Aynı biçimde iki vektörü karşılaştırmakta mümkündür. Bu durumda R vektörlerin elemanlarını sırayla karşılaştırır, yani birinci elemanları, ikinci elemanları vs gibi ve sonucu verir:
a <- c(1,2,3,4,5)
b <- c(1,3,5,7,9)
a == b
## [1] TRUE FALSE FALSE FALSE FALSE
a != b
## [1] FALSE TRUE TRUE TRUE TRUE
a < b
## [1] FALSE TRUE TRUE TRUE TRUE
a > b
## [1] FALSE FALSE FALSE FALSE FALSE
a <= b
## [1] TRUE TRUE TRUE TRUE TRUE
a >= b
## [1] TRUE FALSE FALSE FALSE FALSE
Eşit uzunlukta olmayan vektörler karşılaştırıldığında, küçük olan vektörün son elemanı karşılaştırıldıktan sonra sıra tekrardan başa döner. Örneğin a vektörü 5, b vektörü 3 eleman içeriyorsa; üçüncü elemanlar karşılaştırıldıktan sonra a vektörünün 4. elemanıyla b vektörünün 1. elemanı, a vektörünün 5. elemanıyla b vektörünün 2. elemanı karşılaştırılır. Sonuç uyarı mesajıyla birlikte gelir. Bir vektör tek bir değerle de karşılaştırılabilir. Bu durumda vektörün her bir elemanı sırayla değerle karşılaştırılarak sonuç verilir.
a <- c(1,2,3,4,5)
b <- c(1,5,9)
a == b
## Warning in a == b: longer object length is not a multiple of shorter object
## length
## [1] TRUE FALSE FALSE FALSE TRUE
a == 3
## [1] FALSE FALSE TRUE FALSE FALSE
Karşılaştırma sonucunda herhangi bir TURE sonuç olup olmadığını any ile, bütün sonuçların TURE olup olmadığını all ile kontrol edebiliriz. Vektör büyüklükleri farklı olması halinde uyarı mesajı gelecektir.
a <- c(1,2,3,4,5)
b <- c(1,3,5,7,9)
c <- c(1,2,3)
any(a == b)
## [1] TRUE
all(a == b)
## [1] FALSE
any(a == c)
## Warning in a == c: longer object length is not a multiple of shorter object
## length
## [1] TRUE
all(a == c)
## Warning in a == c: longer object length is not a multiple of shorter object
## length
## [1] FALSE
Vektör elemanlarını nasıl seçerim?
Köşeli parantez kullanarak istediğimiz bir vektör elemanını sırasını belirterek seçebiliriz. İlk vektör elemanının sıra numarası 1’dir. Birden fazla sıra numarası belirtmek mümkündür:
a <- c(1,2,3,4,5)
a[1]
## [1] 1
a[1:3]
## [1] 1 2 3
a[c(1,3,5)]
## [1] 1 3 5
Sıra numarasını negatif işareti (-) ile belirtmek, o sıradaki elemanı hariç tutmak anlamına gelir:
a <- c(1,2,3,4,5)
a[-1]
## [1] 2 3 4 5
a[-(1:3)]
## [1] 4 5
a[c(-1,-3,-5)]
## [1] 2 4
Karşılaştırma operatörlari kullanarak seçim yapabiliriz:
a <- c(1,2,3,4,5)
a < 4
## [1] TRUE TRUE TRUE FALSE FALSE
a[a < 4]
## [1] 1 2 3
Aynı biçimde belirli şartları karşılayan elemanları mantıksal karşılaştırma yoluyla seçebiliriz:
a <- c(1,2,3,4,5)
a %% 2 == 1
## [1] TRUE FALSE TRUE FALSE TRUE
a[a %% 2 == 1]
## [1] 1 3 5
%% operatörü bölme işleminde kalanı verir. a %% 2 == 1 ile vektör elemanlarının tek sayı olup olmadığını sorguladık, a[a %% 2 == 1] ile tek sayıları seçtik.
Karşılaştırma operatörleriyle her türlü seçim işlemi gerçekleştirebiliriz:
a <- c(18.92, 14.27, 19.75, 14.89, 23.79, 15.83, 15.94, 2.51, 25.02, 20.07)
# ortalama değerden küçük elemanları seçebiliriz
a[a < mean(a)]
## [1] 14.27 14.89 15.83 15.94 2.51
# belirli yüzdelik dilimlerdeki elmanları seçebiliriz
a[a < quantile(a,0.05) | a > (quantile(a,0.95))]
## [1] 2.51 25.02
# ortalamadan iki standart sapmadan daha küçük veya büyük olan elemanlar
a[abs(a-mean(a)) > 2*sd(a)]
## [1] 2.51
# NA veya NULL olmayan elemanları seçme
a[!is.na(a) & !is.null(a) ]
## [1] 18.92 14.27 19.75 14.89 23.79 15.83 15.94 2.51 25.02 20.07
Vektörleri aritmetik işlemlerde nasıl kullanırım?
Vektörlerle aritmetik işlem yapıldığında vektör elemanlarının hepsi teker teker işleme girer:
a <- c(1,2,3,4,5)
b <- c(6,7,8,9,10)
a+b
## [1] 7 9 11 13 15
a-b
## [1] -5 -5 -5 -5 -5
a*b
## [1] 6 14 24 36 50
a/b
## [1] 0.1666667 0.2857143 0.3750000 0.4444444 0.5000000
a^b
## [1] 1 128 6561 262144 9765625
Vektörler ile tek bir sayı işlem yapıldığından, vektörün bütün elemanları verilen sayıyla işleme girer:
a <- c(1,2,3,4,5)
a * 5
## [1] 5 10 15 20 25
Vektörlerle yapabileceğimiz aritmetik işlemler sadece bunlarla sınırlı değildir:
a <- c(1,2,3,4,5)
sqrt(a)
## [1] 1.000000 1.414214 1.732051 2.000000 2.236068
log(a)
## [1] 0.0000000 0.6931472 1.0986123 1.3862944 1.6094379
sin(a)
## [1] 0.8414710 0.9092974 0.1411200 -0.7568025 -0.9589243
factorial(a)
## [1] 1 2 6 24 120
factorial(a[length(a)])
## [1] 120
Operatörler arasındaki öncelik sıralaması nasıldır?
R operatörler arasında aşağıdaki öncelik sırasını gözetmektedir. Aynı öncelik sıralamasındaki operatörlerden solda yer alan diğer(ler)ine göre önceliklidir:
| Operatör | Anlamı |
|---|---|
| [ [[ | Seçme |
| :: ::: | Değişkenlere erişim |
| $ @ | Component extraction, slot extraction |
| ^ | Üs alma (sağdan sola) |
| - + | Artı, eksi |
| : | Dizi oluşturma |
| %any% | Özel operatörler |
| */ | Çarpma, bölme |
| +- | Toplama, çıkartma |
| == != < > <= >= | Karşılaştırma |
| ! | Mantıksal “değil” operatörü |
| & && | Mantıksal ve |
| ~ | Formül |
| -> ->> | Sağ yönlü atama |
| = | Sol yönlü atama |
| <- <<- | Sol yönlü atama |
| ? | Yardım |
İki yüzde (%) işareti arasında yer alan operatörlere binary operatör adı verilir. Kullanıcılar da binary operatör tanımlayabilir. Bu operatörlerden bazıları ve kullanışı şu şşekildedir:
# %% modula operatörüdür, bölme işleminde kalanı verir
739 %% 17
## [1] 8
# %/% bölme işleminde sonucu tamsayı olarak verir
739 %/% 17
## [1] 43
# %in% soldaki ögenin sağdakinde yer alıp olmadığını kontrol eder
a <- c(1,3,5,7,9)
c(4,5) %in% a
## [1] FALSE TRUE
Kendi fonksiyonumu nasıl tanımlarım?
Yeni fonksiyonlar basitçe şu şekilde tanımlanır:
function(parametre1, …, parametren) ifade
Şayet fonksiyon ifadesi bir satırı aşıyorsa dalgalı parantez ({}) içerisine alınır. Fonksiyon tanımlanırken bir isim verilerek sonradan o isimle yazacağımız kodun herhangi bir yerinde kullanılabilir:
mymean <- function(x) max(cumsum(x)) / length(x)
mean(1:100)
## [1] 50.5