R ve RStudio’nun nasıl kullanılacağının yanı sıra bazı temel programlama kavramları ve terminolojisi, yaygın tuzaklar, faydalı ipuçları ve nereden yardım alınabileceği konularını ele alacağız. Programlama deneyimi olmayanlar bu bölümü özellikle yararlı bulacaktır, ancak daha önce R kullanmış olsanız bile bazı yararlı ipuçları ve püf noktaları bulabilirsiniz.
R istatistiksel hesaplamalar yapabilen bir programlama dilidir.
1996 yılında Auckland Universitesi’nde Ross Ihaka ve Robert Gentleman tarafından geliştirilmiştir.
1960 yılında Bell Laboratories’de John Chambers ve arkadaşları tarafından geliştirilen S dilinin açık kaynak kodlu halidir.
R yazılımı Genel Kamu Lisansi (GNU* General Public Licence) koşulları altında ücretsiz dağıtılmaktadır.
R ve Temel Geliştirme Takımı (R core team) ile ilgili bilgilere R’in internet sitesinden (https://www.r-project.org/) ulaşılabilir.
R dilinin ilk sürümü 29 Subat 2000 tarihinde yayınlanmıştır. Her iki-üç ayda bir sürümler güncellenmektedir.
RStudio, R ile çalışmayı kolaylaştıran bir Entegre Geliştirme Ortamıdır (Integrated Development Environment[IDE]).
Bunu İngilizce bilmek ve kitap yazmak için NotePad gibi düz bir metin editörü kullanmak ile Microsoft Word gibi bir kelime işlemci kullanmak gibi düşünün. Bunu yapabilirsiniz, ancak bu kadar iyi görünmez ve yazım denetimi ve biçimlendirme gibi şeyler olmadan çok daha zor olur. Benzer bir şekilde, R Studio olmadan da R kullanabilirsiniz ancak bunu tavsiye etmiyorum.
Unutmamanız gereken en önemli şey, bu ders için tüm çalışmalarınızı RStudio kullanarak yapacak olsanız da, aslında iki yazılım parçası kullanıyorsunuz, bu da zaman zaman her ikisinin de ayrı güncellemeleri olabileceği anlamına geliyor.
R’yi ölçme için kullanmanın iki yolu vardır. İlk olarak, web tarayıcınız aracılığıyla R ve R’nin çevrimiçi bir sürümünü kullanabilirsiniz (R server/sunucusu). İkincisi, R ve RStudio’yu dizüstü veya masaüstü bilgisayarınıza ücretsiz olarak indirip kurabilirsiniz.
R istatistiksel programlama, veri analizi ve grafiksel gösterim için kullanılan ve ticari bir amaç gütmeyen ücretsiz bir yazılımdır.
R, UNIX, Windows ve MacOS gibi çeşitli platformlarda kodları derlemekte ve çalıştırmaktadır.
SPSS, SAS gibi veri analizi programları ücretlidir, ayrıca bazı özel psikometri analizleri için yeterli değildir.
R, açık kaynak kodlu olduğu için program kodlarına istenildiği zaman erişilebilir.
Diğer istatistiksel yazılımlar ile karşılaştırıldığında R komut satırı ara yüzünü kullanmaktadır.
Basit koşullar, döngüler ve kişi tanımlı fonksiyonlar yazmaya uyumlu basit ve etkili bir yazım diline sahiptir.
R’in ayrıca grafiksel imkânları oldukça fazladır; bu nedenle yayınlanabilir/basma uygun grafikler oluşturmak kolaydır.
R ekibi birçok alanda ayrıntılı dokümantasyonu yapılmış R paketleri geliştirmektedir.
Klasik istatistik yazılımlarında analiz sonuçları bir kez elde edilir. R yazılımında ise sonuçlar çalışma alanına kaydedilerek, ileriki analiz aşamalarında tekrar kullanabilir.
R, psikometri alanında sıklıkla kullanılan simülasyon çalışmaları için (tekrarlı işlemler için) de avantaj sağlamaktadır.
R, diğer programlama dilleri ve istatistik paket programları ile uyumludur.
R’yi yüklediğinizde, veri işleme ve istatistiksel analiz seçenekleri de dahil olmak üzere bir dizi fonksiyona erişebilirsiniz. Varsayılan kurulumda yer alan fonksiyonlar genellikle Temel R/Base R olarak adlandırılır ve birçok Temel R fonksiyonunu gösteren faydalı bir cheatsheet sayfası vardır 🔗cheatsheet
Temel R telefonunuzda gelen varsayılan uygulamalar, paketleri ise ayrıca indirmeniz gereken ek uygulamalar olarak düşünmek faydalı olabilir.
R fonksiyonları ayrı paketler halinde düzenlenmişlerdir. Böylece gerekli paketlerle çalışarak daha az bellek kullanımı ve hızlı işlem gücü sağlanır.
Bu paketlerin bir başka avantajı da yazılan fonksiyonlardan oluşan paketlerin CRAN’den temin edilerek yüklenebilmesidir.
Her paketin bir yaratıcısı ve kendisine ait bir yardım dosyası bulunur.
Fonksiyon belli bir görevi yerine getirmek için yazılan bir grup komuttur.
Fonksiyonların çalışması için girdilerinin olması gerekmektedir. Fonksiyonlar girdileri ile yaptıkları işlem sonucunda bir çıktı oluştururlar.
Fonksiyonlar girdileri o fonksiyonun çalışması için önceden belirlenen argümanlar ve o argümanların değerlerinden oluşur. (dilbilimle ilgileniyorsanız, bunları bir özne ve nesne gerektiren fiiller olarak düşünmek isteyebilirsiniz)
Fonksiyonların kullanımında üç noktaya dikkat edilmelidir.
argümanların sırası
argümanların olağan (default) değerleri
bazı argümanların zorunlu, bazı argümanların opsiyonel olmasıdır
Bir fonksiyonun aldığı tüm argümanlara yardım dokümantasyonunu
kullanarak ?function formatını kullanarak bakabilirsiniz.
Bazı argümanlar zorunlu, bazıları ise isteğe bağlıdır. İsteğe bağlı
bağımsız değişkenler, herhangi bir değer girmezseniz genellikle
varsayılan/olağan (normalde yardım belgelerinde belirtilen) bir değer
kullanır.
Örnek olarak, normal dağılıma sahip bir sayı kümesini rastgele
üreten rnorm()
fonksiyonunun yardım belgelerine bakalım.
Bir fonksiyonun aldığı tüm argümanlara yardım dokümantasyonunu
kullanarak ?function formatını kullanarak bakabilirsiniz.
Bazı argümanlar zorunlu, bazıları ise isteğe bağlıdır. İsteğe bağlı
bağımsız değişkenler, herhangi bir değer girmezseniz genellikle
varsayılan/olağan (normalde yardım belgelerinde belirtilen) bir değer
kullanır.
n, mean, sd), ancak bu
kesinlikle gerekli değildir. Aşağıdaki iki kod satırının her ikisi de
aynı sonucu üretecektir (rnorm()
fonksiyonunu her çalıştırdığınızda rastgele olduğu için biraz farklı bir
sayı kümesi üretecektir, ancak yine de aynı ortalama ve SD’ye sahip
olacaklardır):rnorm(n = 6, mean = 3, sd = 1) rnorm(6, 3, 1)
Önemli olarak, eğer argüman isimlerini yazmazsanız, R
argümanların varsayılan sırasını kullanacaktır, yani rnorm
için girdiğiniz ilk sayının n olduğunu varsayacaktır.
ikinci sayı mean ve üçüncü sayı
sddir.
Eğer argüman isimlerini yazarsanız, argümanları istediğiniz sırada yazabilirsiniz:
rnorm(sd = 1, n = 6, mean = 3)
R’yi ilk öğrenirken, fonksiyonun her bir parçasının ne yaptığını hatırlamanıza ve anlamanıza yardımcı olabileceğinden, argüman adlarını yazmayı yararlı bulabilirsiniz. Ancak, becerileriniz ilerledikçe argüman adlarını atlamayı daha hızlı bulabilirsiniz ve ayrıca argüman adlarını kullanmayan çevrimiçi kod örnekleri göreceksiniz, bu nedenle her bir kod parçasının hangi argümana atıfta bulunduğunu anlayabilmek önemlidir (veya kontrol etmek için yardım belgelerine bakın).
Bu derste, her bir fonksiyonu ilk kez kullandığımızda argüman adlarını her zaman yazacağız, ancak sonraki kullanımlarda bunlar atlanabilir.
R lineer cebir temelli bir programlama dilidir.
Vektörler tek boyutludur.
R’da vektörler birleştirmek (combine/concatenate) anlamına gelen
c() fonksiyonu
ile oluşturulmaktadır.
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)
(sayisal_vektor <- c(1,2,3))
## [1] 1 2 3
(karakter_vektor <- c("a","b","c")) ## cift tirnak
## [1] "a" "b" "c"
(mantiksal_vektor <- c(TRUE,TRUE,FALSE))
## [1] TRUE TRUE FALSE
Vektör uzunluğu length()
fonksiyonu ile vektör türleri ise class(), mode() ya da typeof()
fonksiyonları ise tur belirlemek için kullanılmaktadır.
Vektörler bir veya daha fazla elemandan oluşabilmektedir.
a <- 1 # tek elemandan oluşur. # Vektör uzunluğunu öğrenmek icin length() fonksiyonu length(a)
## [1] 1
x <- 1:10
bir vektöründeki verilerin toplanması sum(x)
55
bir vektöründeki verilerin çarpılması prod(x)
3.6288^{6}
bir vektöründeki verilerin küçükten büyüğe sıralanması
sort(x) 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
bir vektörünün elemanların sıralarının tersine çevrilmesi
rev(x) 10, 9, 8, 7, 6, 5, 4, 3, 2, 1
bir vektöründeki verilerin standart sapmasının hesaplanması
sd(x) 3.0276504
bir vektöründeki en büyük verinin gösterilmesi
max(x) 10
bir vektöründeki en küçük verinin gösterilmesi
min(x) 1
En büyük verinin vektörün kaçıncı elemanı olduğunun gösterilmesi
which.max(x) 10
En küçük verinin vektörün kaçıncı elemanı olduğunun gösterilmesi
which.min(x) 1
Vektörlerden eleman sırası, isim ve mantıksal operatörler olmak üzere üç farklı yolla eleman seçilebilir.
ad <- c("Ali","Elif","Su","Deniz", "Aras","Berk","Can","Ece","Efe","Arda")
ad vektörünün 1. elemanı ad[1] Ali
ad vektörünün 5. elemanını yazdıracak kodu oluşturunuz.
ad vektörünün son elemanını yazdıracak kodu oluşturunuz.
ad vektörünün son elemanını yazdıracak kodu vektörün 10 elemanlı olduğunu bilmediğiniz de ne yaparsınız?
Vektörün sadece 1., 5. 8 elemanının yazdıracak kodu oluşturunuz.
Vektörün sadece 1. elemanının hariç tutacak kodu oluşturunuz
Vektörün 1. ve 5. elemanının hariç tutacak kodu oluşturunuz
Vektörün son üç elemanını yazdıracak kodu oluşturunuz
ad[11] <- "Asu"; ad
## [1] "Ali" "Elif" "Su" "Deniz" "Aras" "Berk" "Can" "Ece" "Efe" ## [10] "Arda" "Asu"
ad[12:13] <- c("Ahu","Han"); ad
## [1] "Ali" "Elif" "Su" "Deniz" "Aras" "Berk" "Can" "Ece" "Efe" ## [10] "Arda" "Asu" "Ahu" "Han"
(ad <- append(ad, "Taha", after = 3))
## [1] "Ali" "Elif" "Su" "Taha" "Deniz" "Aras" "Berk" "Can" "Ece" ## [10] "Efe" "Arda" "Asu" "Ahu" "Han"
c()
fonksiyonu ile yapılabilir.ad <- c(ad[1:5],"Selim",ad[7:length(ad)]); ad
## [1] "Ali" "Elif" "Su" "Taha" "Deniz" "Selim" "Berk" "Can" "Ece" ## [10] "Efe" "Arda" "Asu" "Ahu" "Han"
ad <- c("Ali","Elif","Su","Deniz", "Aras","Berk","Can","Ece","Efe","Arda") boy <- c(160,165,170,155,167,162,169,158,160,164) kilo <-c(50,55,57,50,48,65,58,62,45,47)
#isimsiz boy vektoru names(boy) # names() fonksiyonu ile isimlendirme yapılabilir.
## NULL
ad vektörünü boy vektörü ile isimlendirirken nasıl kullanabiliriz?
Arda ’nın boyunu isimlendirilmiş vektörü kullanarak
boy["Arda"] ile yazdırırsınız
Vektör oluşturmanın farklı yolları bulunmaktadır.
En basit yolu iki nokta ":" operatörünü
kullanmaktır.
rakamlar <- 0:9 rakamlar
## [1] 0 1 2 3 4 5 6 7 8 9
rakamlar <- 9:0 rakamlar
## [1] 9 8 7 6 5 4 3 2 1 0
library(tidyverse) data(diamonds) head(diamonds)
| carat | cut | color | clarity | depth | table | price | x | y | z |
|---|---|---|---|---|---|---|---|---|---|
| 0.23 | Ideal | E | SI2 | 61.5 | 55 | 326 | 3.95 | 3.98 | 2.43 |
| 0.21 | Premium | E | SI1 | 59.8 | 61 | 326 | 3.89 | 3.84 | 2.31 |
| 0.23 | Good | E | VS1 | 56.9 | 65 | 327 | 4.05 | 4.07 | 2.31 |
| 0.29 | Premium | I | VS2 | 62.4 | 58 | 334 | 4.20 | 4.23 | 2.63 |
| 0.31 | Good | J | SI2 | 63.3 | 58 | 335 | 4.34 | 4.35 | 2.75 |
| 0.24 | Very Good | J | VVS2 | 62.8 | 57 | 336 | 3.94 | 3.96 | 2.48 |
R nesne (object) yönelimli bir programlama dilidir.
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)
tamsayi <- 2L
typeof(tamsayi)
## [1] "integer"
tamsayi
## [1] 2
ondaliksayi <- 2.5
typeof(ondaliksayi)
## [1] "double"
ondaliksayi
## [1] 2.5
x <- 1 y <- 1
x+y
## [1] 2
x <- c(3,4,5) y <- c(1,2,3) # vektör eleman sayıları aynı mı? length(x)==length(y)
## [1] TRUE
x+y
## [1] 4 6 8
x-y
## [1] 2 2 2
x <- 1:9 y <- c(1,2,3) # vektör eleman sayıları farklı mı? length(x)/length(y)
## [1] 3
x+y
## [1] 2 4 6 5 7 9 8 10 12
x/y
## [1] 1.0 1.0 1.0 4.0 2.5 2.0 7.0 4.0 3.0
x <- 1:5 y <- c(1,2) # vektör eleman sayıları farklı olduğunda length(x)/length(y)
## [1] 2.5
x+y işleminin sonucu nedir?Çözüm
x + y
## Warning in x + y: longer object length is not a multiple of shorter object ## length
## [1] 2 4 4 6 6
karakter <- "olcme"
typeof(karakter)
## [1] "character"
karakter
## [1] "olcme"
# karakter nesnesi oluşturulması ad <- "Su" soyad <- "Sevim"
paste(ad,soyad)
## [1] "Su Sevim"
paste(ad,soyad, sep="")
## [1] "SuSevim"
paste(ad,soyad,sep="_")
## [1] "Su_Sevim"
letters
## [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s" ## [20] "t" "u" "v" "w" "x" "y" "z"
LETTERS
## [1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N" "O" "P" "Q" "R" "S" ## [20] "T" "U" "V" "W" "X" "Y" "Z"
month.name
## [1] "January" "February" "March" "April" "May" "June" ## [7] "July" "August" "September" "October" "November" "December"
month.abb
## [1] "Jan" "Feb" "Mar" "Apr" "May" "Jun" "Jul" "Aug" "Sep" "Oct" "Nov" "Dec"
Nesne birleştirme fonksiyonlarından en sık kullananı paste()
paste()
fonksiyonunun temel argümanları ise sep ve
collapse’dir.
harf5<- letters[1:5] (harf51 <- paste(harf5,1:5,sep="_"))
## [1] "a_1" "b_2" "c_3" "d_4" "e_5"
length(harf51)
## [1] 5
(harf52 <- paste(harf5,1:5,sep="_", collapse=" "))
## [1] "a_1 b_2 c_3 d_4 e_5"
length(harf52)
## [1] 1
paste()
fonksiyonun yardım sayfasını inceleyiniz.Büyük Küçük Harf Düzenleme Fonksiyonları toupper() ve
tolower()
toupper(harf5)
## [1] "A" "B" "C" "D" "E"
tolower(harf5)
## [1] "a" "b" "c" "d" "e"
casefold()
fonksiyonu da upper argümanı ile birlikte kullanılabilir.
casefold(harf5, upper = FALSE)
## [1] "a" "b" "c" "d" "e"
casefold(harf5, upper = TRUE)
## [1] "A" "B" "C" "D" "E"
nchar()
fonksiyonu ile belirlenebilir.nchar(month.name)
## [1] 7 8 5 5 3 4 4 6 9 7 8 8
substr() ve
substring()
fonksiyonları kullanılabilir.substr("YILMAZ", 1,3)
## [1] "YIL"
substring("YILMAZ", 1:.. , 1:6) kodunda “Y” “I” “L”
“M” “A” “Z” çıktısı oluşturacak kodu yazınız
`substring("YILMAZ", ... , 4:6) kodunda “ILM” “ILMA”
“ILMAZ”` çıktınısı oluşturacak kodu yazınız
Karakter nesnelerde daha fazlası için aşağıdaki fonksiyonları inceleyebilirsiniz.
Bir rapor hazırladığınızı düşünün
içinde analiz sonuçları olan tablolar
grafikler ve görsel olsun
bu raporu güncellemeniz gerektiğinde veri seti, grafikler, analizler başka dizinlerde olabilir.
Tekrarlanabilir raporlar, tüm analizleri gerçekleştirmek ve tabloları oluşturmak için gereken kodla birlikte rapor metnini tek bir belgede bir araya getirmektir.
Bu, başlangıçta biraz fazladan çaba gerektirse de, herhangi bir değişiklik olduğunda tek bir düğmeye basarak tüm raporunuzu güncellemenizi sağlayarak size fazlasıyla geri ödeme yapacaktır.
Araştırmalar ayrıca, bilimsel literatürdeki makalelerin çoğunda olmasa bile birçoğunda raporlama hataları olduğunu göstermektedir. Tekrarlanabilir raporlar, transkripsiyon ve yuvarlama hatalarını önlemeye yardımcı olur.
Rapor daha sonra orijinal formattan HTML, word ve ya PDF gibi daha taşınabilir başka bir formata “derlenir”. Bu, örneğin Microsoft Excel’de veya SPSS gibi bir istatistik programında bir grafik oluşturup ardından bunu Microsoft Word’e yapıştırdığınız geleneksel kesme ve yapıştırma yaklaşımlarından farklıdır.
Bilgisayarınızın dosya sistemi, hem dosyaları hem de “alt dizinleri” içeren büyük dizin gibidir. Bir dosyanın konumunu adıyla ve içinde bulunduğu tüm dizinlerin adlarıyla belirtebilirsiniz.
Örneğin, Kubra Masaüstünde report.Rmd adında bir dosya arıyorsa, tam dosya yolunu şu şekilde belirtebilir: /Users/Kubra/Desktop/report.Rmd , çünkü Masaüstü dizini, tüm dosya sisteminin tabanında bulunan Kullanıcılar/Users dizininin içindeki Kubra dizininin içindedir. Bu dosya masaüstünüzde olsaydı, kullanıcı dizininizin adı da Kubra değilse muhtemelen farklı bir yola sahip olurdunuz. Şu anda oturum açmış olan kişinin kullanıcı dizinini temsil etmek için ~ kısayolunu da kullanabilirsiniz: ~/Desktop/report.Rmd.
Tüm dosyalarınızı nereye koymalısınız? Genellikle tek bir proje için tüm komut dosyalarınızın ve veri dosyalarınızın bilgisayarınızdaki tek bir klasörde, o projenin çalışma dizininde olmasını istersiniz. Dosyaları bu ana proje dizini içindeki alt dizinlerde düzenleyebilirsiniz, örneğin tüm ham veri dosyalarını data/import adlı bir dizine koyabilir ve tüm görüntü dosyalarını images adlı bir dizine kaydedebilirsiniz.
Kodunuz, uygun biçimi kullanarak yalnızca üç tür konumdaki dosyalar kullanılmalıdır.
Dosyaları, hem insanların hem de bilgisayarların kolayca bulabileceği şekilde adlandırın. İşte bazı önemli ilkeler:
dosya ve dizin adları yalnızca harf, rakam, tire ve alt çizgi içermeli, dosya adı ve uzantısı arasında nokta (.) olmalıdır (bu boşluk olmadığı anlamına gelir!)
Büyük harf kullanımı konusunda tutarlı olun (hatırlamayı kolaylaştırmak için bir kural belirleyin, örneğin her zaman küçük harf kullanın)
dosya adının bölümlerini ayırmak için alt çizgi (_) ve bir bölümdeki sözcükleri ayırmak için tire (-) kullanın
dosyaları mantıklı bir sırayla alfabetik hale getiren ve aradığınız dosyayı bulmanızı kolaylaştıran bir kalıpla adlandırın
bir dosya adını listenin en üstüne taşımak için önüne alt çizgi ekleyin veya sıralarını kontrol etmek için tüm dosyaların önüne sayı ekleyin
tarihler için YYYY-MM-DD biçimini kullanın, böylece kronolojik sıraya göre sıralanırlar.
Artık dosya sisteminin nasıl çalıştığını ve komut dosyalarının bunlara erişmesini kolaylaştırmak için nesneleri nasıl adlandıracağımızı anladığımıza göre, projemizi yapmaya hazırız.
Öncelikle, bu sınıf için tüm materyallerinizi tutacağınız yeni bir dizin oluşturun (benimki Ranaliz adınında). Bu dizini Global Options’ın general bölümü altında varsayılan çalışma dizini olarak ayarlayabilirsiniz. Bu, bir projede çalışmıyorsanız dosyaların varsayılan olarak buraya kaydedileceği anlamına gelir
Tekrar üretilebilir raporlar oluşturmak için metin ve kodun karıştırılmasını sağlayan R Markdown kullanacağız. Yeniden üretilebilir bir komut dosyası, kod bloklarında kod bölümleri içerecektir. Bir kod bloğu arka arkaya üç backtick sembolü ile başlar ve biter, küme parantezleri arasında kod hakkında bazı bilgiler bulunur, örneğin {r chunk-name, echo=FALSE} (bu kodu çalıştırır, ancak derlenen belgede kod bloğunun metnini göstermez). Kod bloklarının dışındaki metin, başlıklar, paragraflar, listeler, kalınlaştırma ve bağlantılar gibi biçimlendirmeyi belirtmenin bir yolu olan markdown ile yazılır.
Bir şablondan yeni bir R Markdown dosyası açarsanız, içinde birkaç kod bloğu bulunan örnek bir belge görürsünüz. Bir R Markdown (Rmd) belgesinden HTML veya PDF raporu oluşturmak için belgeyi derlersiniz. Bir belgeyi derlemeye RStudio’da örme denir. Dosyanızı bir rapora derlemek için üzerine tıkladığınız, içinden iğneler geçen bir iplik yumağına benzeyen bir düğme vardır.
--- title: "Demo" author: "Kubra" output: html_document: toc: true toc_float: collapsed: false smooth_scroll: false number_sections: false ---
Varsayılan temalar şunlardır: default, cerulean, cosmo, darkly, flatly, journal, lumen, paper, readable, sandstone, simplex, spacelab, united ve yeti.