Hafta 1: R ve R Studio Temeller

R temel sistem (base) ve paketlerden oluşan bir programlama dilidir. R Studio programı içerisinde:

  • Komut satırımı yazım penceresi
  • konsol alanı
  • environment (çevre)
  • diğer menüler (files, plots, packages vb.)

yer alır.

R Kaynakları

Temel Özellikler ve Komutlar

  • R konsolda görünen > işareti, R yazılımının sizden komut beklediğini belirtir.
  • R boşluklara duyarlı değildir.
  1. + toplama
  2. - çıkarma
    • çarpma
  3. / bölme
  4. ^,** üs alma
  5. %% mod alma
  • R’da yeni bir nesne oluşturulurken atama operatörü <- kullanılır.

Nesnelerin Adlandırılması

  • adlandırma harflerle başlamalı, sonra rakamlar ve alt çizgi kullanılmalıdır (a1_1)
  • R fonksiyonuna benzer şekilde isim verilmemeli
  • Tek harfli nesne adı olmamalı
  • R büyük ve küçük harflere duyarlıdır

Hafta 2: R Paketler

R paket yükleme işlemei install.packages() fonksiyonu ile console da yer alan packages sekmesineden yapılabilir.

Paketi aktif hale getirmek için ise library() fonksiyonu kullanılır.

R’da bulunan temel paketlere ulaşmak için builtins() kullanılabilir.

fonksiyonlar <- builtins()
fonksiyonlar[910:920]
##  [1] "cut.Date"       "cut"            "curlGetHeaders" "cumsum"        
##  [5] "cumprod"        "cummin"         "cummax"         "Cstack_info"   
##  [9] "crossprod"      "cospi"          "cosh"

Github Paketleri Yükleme

Bazı R paketleri Git hub üzerinden yüklenmektedir. Bu paketlerin yüklenmesinde devtools() fonksiyonu kullanılır.

  • Paketin yüklenmesi için örnek kod satırı:

devtools::install_github("dr-JT/semoutput")

Kod satırında:

  • dr-JT paket yazarının adı,
  • semoutput ise paketin adıdır.

Yardım Sayfaları

Yardım sayfaları kullanılarak fonksiyon hakkında bilgi alınabilir. Bunun için:

  • ?(fonksiyon adı)

ya da

  • help(fonksiyon adı)

komutları kullanılabilir. Örnek olarak devtools fonksiyonuna ait yardım sayfasının görüntüsü verilmiştir.

Paket çakışmaları

R’da farklı paketlerde aynı isimde fonksiyonlar yer alabilir. Böyle paketlerin aynı anda kullanımında aynı isimli fonksiyonlardan kayanklı çakışmalar meydana gelebilir. Bu durumun önüne geçmek amacıyla:

package::function biçiminde kod kullanılabilir. Örneğin;

dplyr::select() MASS::select()

R ve RStudio’da Alıntı yapma

Alıntı yapmak için citation(paket adı) fonksiyonu kullanılır. devtools() fonksiyonu için alıntı örneği aşağıda verilmiştir.

## To cite package 'devtools' in publications use:
## 
##   Wickham H, Hester J, Chang W, Bryan J (2022). _devtools: Tools to
##   Make Developing R Packages Easier_. R package version 2.4.5,
##   <https://CRAN.R-project.org/package=devtools>.
## 
## A BibTeX entry for LaTeX users is
## 
##   @Manual{,
##     title = {devtools: Tools to Make Developing R Packages Easier},
##     author = {Hadley Wickham and Jim Hester and Winston Chang and Jennifer Bryan},
##     year = {2022},
##     note = {R package version 2.4.5},
##     url = {https://CRAN.R-project.org/package=devtools},
##   }

Hafta 3: Fonksiyonlar

  • Fonksiyon belirli bir görevi yapması için yazılan bir grup komuttur. Bir fonksiyonun çalışabilmesi için girdileri olmalıdır.

    Girdiler = Argümanlar + Argümanlarının Değerleri

rnorm() fonksiyonunun argümanları ve elemanları görüntülemek için arg(rnorm) ve örneklerinin görüntülenmesi içinde example(rnorm) fonksiyonları kullanılır.

Örneğin rnorm(10) argümanları ve elemanları verilmiştir.

rnorm(10)
##  [1]  0.45755233 -0.04325666 -0.25816283  1.22388505 -1.38584317  1.82153757
##  [7]  0.88499790 -0.51336407  0.81338901 -0.59198299
args(rnorm)
## function (n, mean = 0, sd = 1) 
## NULL
example(rnorm)
## 
## rnorm> require(graphics)
## 
## rnorm> dnorm(0) == 1/sqrt(2*pi)
## [1] TRUE
## 
## rnorm> dnorm(1) == exp(-1/2)/sqrt(2*pi)
## [1] TRUE
## 
## rnorm> dnorm(1) == 1/sqrt(2*pi*exp(1))
## [1] TRUE
## 
## rnorm> ## Using "log = TRUE" for an extended range :
## rnorm> par(mfrow = c(2,1))
## 
## rnorm> plot(function(x) dnorm(x, log = TRUE), -60, 50,
## rnorm+      main = "log { Normal density }")
## 
## rnorm> curve(log(dnorm(x)), add = TRUE, col = "red", lwd = 2)
## 
## rnorm> mtext("dnorm(x, log=TRUE)", adj = 0)
## 
## rnorm> mtext("log(dnorm(x))", col = "red", adj = 1)
## 
## rnorm> plot(function(x) pnorm(x, log.p = TRUE), -50, 10,
## rnorm+      main = "log { Normal Cumulative }")

## 
## rnorm> curve(log(pnorm(x)), add = TRUE, col = "red", lwd = 2)
## 
## rnorm> mtext("pnorm(x, log=TRUE)", adj = 0)
## 
## rnorm> mtext("log(pnorm(x))", col = "red", adj = 1)
## 
## rnorm> ## if you want the so-called 'error function'
## rnorm> erf <- function(x) 2 * pnorm(x * sqrt(2)) - 1
## 
## rnorm> ## (see Abramowitz and Stegun 29.2.29)
## rnorm> ## and the so-called 'complementary error function'
## rnorm> erfc <- function(x) 2 * pnorm(x * sqrt(2), lower = FALSE)
## 
## rnorm> ## and the inverses
## rnorm> erfinv <- function (x) qnorm((1 + x)/2)/sqrt(2)
## 
## rnorm> erfcinv <- function (x) qnorm(x/2, lower = FALSE)/sqrt(2)

Fonksiyonların Kullanımında Dikkate Edilmesi Gerekenler

  1. Argümanların sırası
  2. Argümanların olağan değerleri
  3. Bazı argümanların zorunlu, bazı argümanların opsiyonel olması

Kişisel Tanımlı Fonksiyon Oluşturma

Şablon olarak aşağıda belirtilen ifadeler kullanılır.

fonksiyonadi<- function(argumanlar ve olagan degerleri){ kodlar return() }

Örnek fonksiyon yazımı: farklı dereceden üs alma

us_al<-  function(x,us){
  return(x^us)
}
us_al(3,2)
## [1] 9

Sık Kullanılan Fonksiyonlar ve İşlevleri

Fonksiyon Adı İşlevi
mean() ortalama alma
avg() vektör ortalaması alma
identical() benzerlik sorgulama
ls() çalışma alanında kayıtlı nesneleri sorgulama
objects() çalışma alanında kayıtlı nesneleri sorgulama
ls.str() hafızadki nesneleri ayrıntıları ile gösterme
q() R’ı kapatma
setwd() çalışma dizinini değiştirme
getwd() çalışma dizinini sorgulama

Hafta 4: Vektörler

  • Vektörler tek boyutludur. R’da c() fonksiyonu ile vektörler oluşturulur.

  • R da veriler bir araya gelerek veri yapılarını oluşturur.

    • vektör (vector)
    • liste (list)
    • matris (matrix)
    • veri seti (data.frame)
    • dizi (array)

Vektör Oluşturma

  • sayisal_vektör <- c(1,2,3)
  • karakter_vekör <- c(“a”,“b”,“c”)
  • mantiksal_vektör <- c(TRUE, FALSE, FALSE)

Vektör İşlemleri

  • Vektörler bir veya daha fazla elemandan oluşabilmektedir.
    • length() fomksiyonu ile vektör uzunluğu bulunur.
ad <- 1 # ad vektörü tek elemandan oluşmaktadır.
length(ad)
## [1] 1

Vektörlerle yapılan işlemlerde kullanılan fonksiyonlar tabloda belirtilmiştir.

Fonksiyon Adı İşlevi
sum() verilerin toplanması
prod() verilerin çarpılması
sort() küçükten büyüğe sıralanması
rev() elemanların sıralarının tersine çevrilmesi
sd() standart sapmasının hesaplanması
max() en büyük verinin gösterilmesi
min() en küçük verinin gösterilmesi
which.max() en büyük verinin vektörün kaçıncı elemanı olduğunun gösterilmesi
which.min() en küçük verinin vektörün kaçıncı elemanı olduğunun gösterilmesi

Vektörlerden Eleman Seçme

  • ad[1]: ad vektörünün birinci elemanını seçer.
  • ad[length(ad)] : ad vektörünün uzunluğunu bilmeden son elemanını seçer.
  • ad[c(1,5,8)] : ad vektörünün 1. 5. ve 8. elemanını seçer.
  • ad[-1] : ad vektörünün sadece 1. elemanını seçmez.
  • ad[-c(1,5)] :ad vektörünün 1. ve 5. elemanlarını hariç tutar.
  • ad[8:10] : ad vektörünün 8. 9. ve 10. elemanlarını seçer.
  • ad[(length(ad)-2):length(ad)] : ad vektörünün son üç elemanını seçer

Vektöre Eleman Eklenmesi

ad  <-  c("Ali","Elif","Su","Deniz","Aras","Berk","Can","Ece","Efe","Arda")
ad[11] <- "Asu"; ad #tek eleman ekleme
##  [1] "Ali"   "Elif"  "Su"    "Deniz" "Aras"  "Berk"  "Can"   "Ece"   "Efe"  
## [10] "Arda"  "Asu"
ad[12:13] <- c("Ahu","Han") #birden fazla eleman ekleme
ad
##  [1] "Ali"   "Elif"  "Su"    "Deniz" "Aras"  "Berk"  "Can"   "Ece"   "Efe"  
## [10] "Arda"  "Asu"   "Ahu"   "Han"
  • append() fonksiyonu kullanımı
ad  <-  c("Ali","Elif","Su","Deniz","Aras","Berk","Can","Ece","Efe","Arda")
ad <- append(ad, "Taha", after=3) #başlangıçtan 3 kişi sonraya eleman ekleme
ad
##  [1] "Ali"   "Elif"  "Su"    "Taha"  "Deniz" "Aras"  "Berk"  "Can"   "Ece"  
## [10] "Efe"   "Arda"
ad  <-  c("Ali","Elif","Su","Deniz","Aras","Berk","Can","Ece","Efe","Arda")
# 6.eleman olarak Selim'i ekleme
ad <- c(ad[1:5],"Selim",ad[7:length(ad)]); ad 
##  [1] "Ali"   "Elif"  "Su"    "Deniz" "Aras"  "Selim" "Can"   "Ece"   "Efe"  
## [10] "Arda"

Örüntülerle Vektör Oluşturma

Örüntülerle vektör oluşturmanın en kolay yolu : operatörüdür.

rakamlar1 <- 0:9
rakamlar1
##  [1] 0 1 2 3 4 5 6 7 8 9
rakamlar2 <- 9:0
rakamlar2
##  [1] 9 8 7 6 5 4 3 2 1 0

Farklı fonksiyonlar kullanılarak da vektörler oluşturulabilir. Bu fonksiyonların yardım sayfaları incelenmelidir.

  • seq()
  • rep()
  • paste()

Çeşitli örnekler ve ilgili kodlar sırasıyla verilmiştir.

#'den 10'a kadar birer birer artan sayı dizisi oluşturma
#seq(1,10,1) ya da seq(to=10) de aynı sonucu verir.
seq(from=1, to=10, by=1) #length.out argümanını incele.
##  [1]  1  2  3  4  5  6  7  8  9 10
# üç elemanlı bir vektörün üç kere tekrar ettirilmesi
rep(c(3,4,5), 3)
## [1] 3 4 5 3 4 5 3 4 5
paste("test", 1:10)
##  [1] "test 1"  "test 2"  "test 3"  "test 4"  "test 5"  "test 6"  "test 7" 
##  [8] "test 8"  "test 9"  "test 10"

Rastgele Veri Oluşturma

sample() , runif() , rnorm() gibi farklı fonksiyonlarla rastgele veri üretilebilir. Bu fonksiyonların yardım sayfaları incelenmelidir.

Çeşitli örnekler ve ilgili kodlar sırasıyla verilmiştir.

# 0 ile 100 arasında rastgele 5 sayı üretme
sample(0:100,5)
## [1] 84 39  0 53 82
# 0 ile 5 arasında 10 tane rastgele sayı üretme
runif(10,0,5)
##  [1] 2.67884391 0.88390650 0.68395980 3.52908604 0.60968669 2.33438047
##  [7] 2.73759875 0.22371842 1.85168252 0.08216813
# Ortalaması 50 standart sapması 5 olan, 10 tane rastgele sayı üretme
rnorm(10,50,5)
##  [1] 52.01369 58.50614 47.87425 53.03580 48.16643 49.71609 45.12537 52.45166
##  [9] 52.16236 52.44814

Hafta 5: R Nesneler

R nesne yönelimli bir programlama dilidir. R’da nesne çeşitleri:

  • Karakter (character)
  • Sayısal (numeric)
    • tam sayı (integer)
    • ondalıklı sayı (double)
    • karmaşık sayı (complex)
  • Mantıksal (logical)
  • Faktör (factor)
  • Liste (list)
  • Fonksiyon (function)

Tam Sayı

tamsayi <- 2L
typeof(tamsayi)
## [1] "integer"
tamsayi[1]
## [1] 2

Ondalık Sayı

ondalik_sayi <- 2.5
typeof(ondalik_sayi)
## [1] "double"
ondalik_sayi [1]
## [1] 2.5

İşlemler

x <- 1
y <- 2
x+y
## [1] 3
a <- c(3,4,5)
b <- c(1,2,3)
a+b
## [1] 4 6 8
a-b
## [1] 2 2 2
a*b
## [1]  3  8 15
a/b
## [1] 3.000000 2.000000 1.666667

Karakter Nesneler

karakter <- "Yaşasın_Cumhuriyet"
typeof(karakter)
## [1] "character"
karakter
## [1] "Yaşasın_Cumhuriyet"
a <- "Yaşasın"
b <- "Cumhuriyet"
paste (a,b)
## [1] "Yaşasın Cumhuriyet"

Nesne Türlerini Sorgulama

class() veya mode() fonksiyonları da kullanılabilir. Herhangi bir nesnenin belirli bir türe ait olup olamdığı ise is.() fomksiyonu ile sorgulanır. Sayısal verilerin türünü sorgulamak için typeof() fonksiyonu da kullanılabilir.

x <- 3.14
is.numeric(x)
## [1] TRUE
is.logical(x)
## [1] FALSE
y <- 2L
is.integer(y)
## [1] TRUE
is.double(y)
## [1] FALSE

Mantıksal Nesneler

Programlamanın temelini oluştururlar.

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

Mantıksal operatörlerle yapılan sınamalar ile mantiksal nesneler oluşturulur.

sonuc <- 5<10
typeof(sonuc)
## [1] "logical"
sonuc
## [1] TRUE

**as.*()** fomksiyonu ile nesne türleri arasındaki değişim sağlanır.

as.numeric("3.14") #karakterden sayısala
## [1] 3.14
as.integer(pi) #ondalıktan tam sayıya
## [1] 3
as.character(TRUE) #mantıksaldan karaktere
## [1] "TRUE"

substr() fonksiyonu karakter nesneleri belirli bir yerden bölmek için kullanılır.

substr("YILMAZ",1:6,1:6)
## [1] "Y"
substring("YILMAZ",1:6,1:6)
## [1] "Y" "I" "L" "M" "A" "Z"