Bölüm 3 Temel Bilgiler
Kodlari editorde yazip Ctrl+Enter ile calistirabilirsiniz. Alternatif olarak Konsol’da da kodlari yazabilirsiniz ancak editore yazdiklarinizi kaydederek yazdiklarinizdan elinizde bulunmasini istediklerinizi kaydedebilirsiniz. Onerim hep konsolu kullanmaniz, kullanisli olan kodlari tutup digerlerini / calismayanlari silip temiz bir sekilde dosyanizi kaydetmeniz.
Ilk olarak hangi klasorde nerde calisiyoruz buna bakalim. Bu R’da dosya acarken ve yaptiklarimizi kaydederken onemli bir detay. Bunun icin getwd()
yani ‘get directory’ komutunu kullanacagiz. Bunu calistirdigimizda aldigimiz sonuc hepimizde farkli olacaktir. Bu bilgisayarinizda nerede calistiginizi gosteriyor:
getwd()
## [1] "/Users/melike/GDrive/githubbooks/20210322_REgitim"
Bu varsayilan ortamda degil de belli bir klasorun icinde calismak istiyorsaniz, istediginiz klasore setwd()
fonksiyonu ile asagidaki sekilde gecebiliriz. Ancak onerim az sonra aciklayacagim sekilde RStudio projesi kullanmaniz.
setwd("~/GDrive/projects/R_Egitim")
3.1 RStudio projesi
R’da calisirken her zaman proje olusturmanizi tavsiye ederim. Bu sayede hem her projenize ait kod tarihi ayrica saklanir, hem de calistiginiz klasor vs. gibi konularda endiselenmeniz gerekmez. RStudio projelerinin bunlar haricinde versiyon kontrol konusu vs. gibi ileri asamalarda kullanacaginiz diger konularda da fayda saglar. Sag ust kosedeki New Project’e basip, ’yeni klasor’u secerek yeni proje olusturabilirsiniz. Bunu yaptiktan sonra getwd()
fonksiyonunu tekrar calistiralim:
getwd()
## [1] "/Users/melike/GDrive/githubbooks/20210322_REgitim"
Benim sonucumda degisen bir sey yok cunku zaten proje icinde calisiyordum ancak sizin sonucunuz degismis olmali.
3.2 Hesap makinesi olarak R
2+2
## [1] 4
5*7
## [1] 35
20-4
## [1] 16
3^2
## [1] 9
100/2
## [1] 50
9%%5
## [1] 4
9%/%5
## [1] 1
3.3 Fonksiyonlar
R kendi yazacaginiz fonksiyonlarin yaninda kendi icinde cok sayida fonksiyon barindirir, az once kullandigimiz getwd()
fonksiyonu gibi. Bunlar fonksiyon adini takiben, parantez icinde belli argumanlar alirlar. Birkac ornek:
log10(x = 100)
## [1] 2
log10(100)
## [1] 2
sqrt(16)
## [1] 4
3.3.1 Yardım almak
R’da cogu fonksiyon yardim sayfasi icerir ve bunlara ?
operatoru ile ulasilir:
?log10 ?getwd
3.4 Değişkenlerle çalışmak
Degiskenler veri tutuculardir. Degisken atamak icin <-
ya da =
operatorleri kullanilir. Tarihsel olarak <-
kullanilsa da bugun pratik nedenlerle =
daha yaygindir ve kullanimi yanlis degildir.
<- 3
a print(a)
## [1] 3
= 5
b print(b)
## [1] 5
= a + b
c print(c)
## [1] 8
c
## [1] 8
Rda degisken isimleriyle ilgili kimi kisitlamalar var:
- harf ya da nokta ile baslar
- ozel anlami olan kelimeler kullanilmaz (if
ya da for
gibi). bunlari ?reserved
yazarak ogrenebilirsiniz.
- yasak olmasa da Rda yer alan fonksiyon isimleri ile ayni degiskenler yaratmamaya calismak gerekir, soruna yol acabilir.
- degiskenler kucuk buyuk harfe duyarlidir, a
ve A
birbirinden farkli degiskenlerdir.
- simdiye kadar ornekleri a
b
x
gibi harflerden olusturmus olsak da, tuttugu veriyle ilgili bir isim secmek iyi bir aliskanliktir.
3.5 R’da objeler
3.5.1 Obje türleri
5 temel obje turu var; karakter, numerik, tam sayi (integer), kompleks, mantiksal (logical/boolean).
3.5.1.1 Karakter
= 'a'
x x
## [1] "a"
class(x)
## [1] "character"
Karakter objeleri tek karakter icermek zorunda degildir
= "bu da karakter"
y y
## [1] "bu da karakter"
class(y)
## [1] "character"
Degiskenler a
gibi tirnak isareti olmadan yazilir, karakterler ise "a"
ya da 'a'
seklinde yazilir. R’da ’ ile " kullanimi karakterlerde farketmez. Ayrica tirnak icindeki karakter sadece harf olmak zorunda degil, ne olursa olsun bir karakter objesidir:
= '5'
a a
## [1] "5"
class(a)
## [1] "character"
3.5.1.2 Nümerik ve tam sayılar
= 3
x x
## [1] 3
class(x)
## [1] "numeric"
= 3.14
x x
## [1] 3.14
class(x)
## [1] "numeric"
= 1/0
x x
## [1] Inf
class(x)
## [1] "numeric"
= 0/0
x x
## [1] NaN
class(x)
## [1] "numeric"
Özellikle tam sayı oluşturmak istiyorsak sonda L
ekini kullanmalıyız.
= 3L
x x
## [1] 3
class(x)
## [1] "integer"
3.5.1.3 Kompleks
= 5+2i
x x
## [1] 5+2i
class(x)
## [1] "complex"
3.5.1.4 Mantıksal (Logical, boolean)
= TRUE
x x
## [1] TRUE
class(x)
## [1] "logical"
= T
y y
## [1] TRUE
class(y)
## [1] "logical"
= FALSE
z z
## [1] FALSE
class(z)
## [1] "logical"
= F
a a
## [1] FALSE
class(a)
## [1] "logical"
= 'F'
a a
## [1] "F"
class(a)
## [1] "character"
Bunlar temel obje turleri olsa da, ileride class fonksiyonunu kullandiginizda baska sonuclar alabilirsiniz. Bu temelde R’in nesne tabali dogasindan kaynakli.
Ayrica objeniz bir matris ise, numerik degerlere mi karakterlere mi sahip, bunu ogrenmek icin mode()
fonksiyonunu kullanmaniz gerekecek.
3.5.2 Vektör
Ayni temel obje turunden olusan elementler iceren dizilerdir:
= c(1, 2, 3)
x x
## [1] 1 2 3
class(x)
## [1] "numeric"
burada c
vektor olusturmak icin kullanilmis bir fonksiyondur, combine ya da concatanate kelimelerinin kisaltilmisi olarak dusunulebilir.
= c(T, F, T, T)
x x
## [1] TRUE FALSE TRUE TRUE
class(x)
## [1] "logical"
= c('a', 'b', 'cc')
x x
## [1] "a" "b" "cc"
class(x)
## [1] "character"
Ayni tipte olmayan degerleri birlestirirseniz, beklenmeyen davranislarla karsilasabilirsiniz.
= c(3.14, 'karakter', 3i+2, TRUE, F, 5L)
x x
## [1] "3.14" "karakter" "2+3i" "TRUE" "FALSE" "5"
class(x)
## [1] "character"
Hata almadik ama objeler birlestirme sirasinda kendi modlarini koruyamadilar. Bu sebeple eger numerik vektoru karakter vektoruyle birlestirirseniz, numerik degerler karaktere donuseceginden artik numerik islemler yapamazsiniz.
Vektorun belli bir elemanini almak icin []
operatoru kullanilir.
2] x[
## [1] "karakter"
3.5.3 Liste
Listeler, birden fazla obje turunu icerebilir:
= list(1, 2, TRUE, 'a')
mylist mylist
## [[1]]
## [1] 1
##
## [[2]]
## [1] 2
##
## [[3]]
## [1] TRUE
##
## [[4]]
## [1] "a"
Listenin belli bir elemanini almak icinse [[]]
operatoru kullanilmalidir:
1]] mylist[[
## [1] 1
3]] mylist[[
## [1] TRUE
3.5.4 Matris
Matrisler iki boyutlu verilerdir, yanyana dizilmis ayni uzunluktaki vektorler gibi de dusunebilirsiniz:
<- 1:2
a <- 3:4
b <- 5:6 c
= cbind(a,b,c)
x x
## a b c
## [1,] 1 3 5
## [2,] 2 4 6
= rbind(a,b,c)
y y
## [,1] [,2]
## a 1 2
## b 3 4
## c 5 6
dim(x)
## [1] 2 3
1,1] x[
## a
## 1
1,2] x[
## b
## 3
1,] x[
## a b c
## 1 3 5
2] x[,
## [1] 3 4
colnames(x)
## [1] "a" "b" "c"
rownames(x)
## NULL
rownames(x) = c('satir1','satir2')
x
## a b c
## satir1 1 3 5
## satir2 2 4 6
dimnames(x)
## [[1]]
## [1] "satir1" "satir2"
##
## [[2]]
## [1] "a" "b" "c"
3.5.5 Faktör
Faktörler kategorik verilerle uğraşırken kullandığımız verilerdir. Yani değişkenimiz sadece belli bir set içinden değer alabilir.
= c("elma", "muz", "elma", "armut", "muz")
a a
## [1] "elma" "muz" "elma" "armut" "muz"
class(a)
## [1] "character"
= factor(c("elma", "muz", "elma", "armut", "muz"))
a a
## [1] elma muz elma armut muz
## Levels: armut elma muz
class(a)
## [1] "factor"
levels(a)
## [1] "armut" "elma" "muz"
3.5.6 Data frame
Data frame goruntu itibariyle matrisleri andirsa da farkli veri tiplerini barindirabilmesinden dolayi, liste gibidir.
= data.frame(id = c(1,2,3,4),
x isim = c('ali','veli','ayse','fatma'),
ogrenci = c(T,T,F,T))
x
## id isim ogrenci
## 1 1 ali TRUE
## 2 2 veli TRUE
## 3 3 ayse FALSE
## 4 4 fatma TRUE
class(x)
## [1] "data.frame"
data.frame icinde bir sutunu almak icin matrislerde oldugu gibi []
ya da $
operatorunu kullanabilirsiniz:
2] x[,
## [1] "ali" "veli" "ayse" "fatma"
$isim x
## [1] "ali" "veli" "ayse" "fatma"
3,2] x[
## [1] "ayse"
$isim[3] x
## [1] "ayse"
3.6 Paketler
Son olarak R’da ozellesmis bazi fonksiyonlari ve veri tiplerini bulabileceginiz fonksiyonlar vardir. Bunlardan bazilari R’i indirdiginiz CRAN uzerinden, bazilari (ozellikle biyolojik veri analizi ile ilgili olanlari) Bioconductor uzerinden, bazilari da paketi olusturan kisilerin github repolari uzerinden indirilir. Indirme komutlari farkli olsa da, hepsi library(PAKETADI)
komutu ile R’a yuklenir. Kullanisli bir kac paketi yukleyelim:
CRAN’dan indirmek icin:
install.packages('ggplot2')
Bioconductor’dan paket indirmeden once, CRAN’dan BiocManager paketini indirmeniz gerekir:
install.packages("BiocManager")
Bioconductor’dan paket indirmek icin, BiocManager’i library()
fonksiyonu ile Ra yuklemeden BiocManager::
ile bu paket icindeki bir fonksiyonu kullanabilirsiniz:
::install("preprocessCore") BiocManager
GitHub’dan bir paket indirmek icinse CRANdan indireceginiz devtools
paketine ihtiyaciniz vardir. Paketlerin Github sayfalarindan indirme komutuna ulasabilirsiniz. Biz calistayda bu sekilde bir paket kullanmayacagiz.