💻R Programlamaya Giriş ve Temel Kavramlar - Ders Notları I
- Hasan Bakır

- 31 Eki
- 9 dakikada okunur

Eğer “R nedir, nasıl çalışır, neden veri analizi için tercih edilir?” sorularına yanıt arıyorsanız, doğru yerdesiniz. Aşağıda yer alan notlar hem R Studio’nun temel işlevlerini anlamanıza hem de ilk veri analizlerinizi güvenle yapmanıza yardımcı olacak. Kodlama sürecine geçmeden önce, çalışma dizininden operatör kullanımına, vektörlerden fonksiyon yazımına kadar R dilinin temel taşlarını birlikte keşfedelim.
Giriş
Birinci pencere kodların yazıldığı alandır. Eğer çalışma kayıtlı değilse dosyanın ismi kırmızı renkte olur. Kodu çalıştırmak içinse “run” (ctrl+enter) tuşuna basarız.

Ctrl+L : Console ekranını temizler.
R’da hangi klasörün altında olduğumuzu öğrenmek için: getw() kullanmalıyız. (Consolle’da)
Operatörler
Atama operatörleri sağda yazılanı sola atar.
<- ve = aynı işlevi görmektedir fakat bazı işlemlerde = işaretinin işlevi farklı olduğu için atamalarda <- işaretinin kullanılması tavsiye edilmektedir. Büyük projelerde <- işareti daha az karmaşa yaratır.
Aritmetik Operatörler
#, +, -, *, ^,
R Studio’da (ya da genel olarak R dilinde) bu işaretler aritmetik operatörler olarak kullanılır ve her biri belirli bir matematiksel işlemi temsil eder. Kısaca şöyle açıklanabilir:
· # → Yorum satırı işaretidir, aritmetik bir işlem yapmaz. Satırın bu işaretten sonraki kısmı R tarafından çalıştırılmaz, sadece açıklama olarak kalır.Örnek: x <- 5 # bu bir açıklamadır
· + → Toplama işlemi yapar.Örnek: 3 + 2 sonucu 5
· - → Çıkarma işlemi yapar veya bir sayıyı negatif yapar.Örnek: 7 - 4 sonucu 3, -8 negatif sekiz anlamındadır.
· * → Çarpma işlemi yapar.Örnek: 6 3 sonucu 18
· / → Bölme işlemi yapar.Örnek: 10 / 2 sonucu 5
· ^ → Üs alma işlemi yapar.Örnek: 2 ^ 3 sonucu 8 (yani 2³)
Mantıksal Operatörler
#, <, >, >=, <=, !=, &, ==
İşte R dilinde kullanılan mantıksal operatörlerin tamamı, kısa ve açıklayıcı bir özet halinde:
· # → Yorum satırı işaretidir. Mantıksal işlem yapmaz; kodun açıklama kısmını belirtmek için kullanılır.Örnek: x <- 5 # bu bir açıklamadır
· < → Küçüktür. Soldaki değerin sağdakinden küçük olup olmadığını kontrol eder.Örnek: 3 < 5 sonucu TRUE
· > → Büyüktür. Soldaki değerin sağdakinden büyük olup olmadığını kontrol eder.Örnek: 8 > 10 sonucu FALSE
· <= → Küçük veya eşittir.Örnek: 2 <= 2 sonucu TRUE
· >= → Büyük veya eşittir.Örnek: 5 >= 4 sonucu TRUE
· == → Eşittir. İki değerin tam olarak aynı olup olmadığını kontrol eder.Örnek: 7 == 7 sonucu TRUE
· != → Eşit değildir. İki değerin birbirine eşit olmaması durumunda TRUE döner.Örnek: 4 != 5 sonucu TRUE
· & → VE (AND) operatörü. Her iki koşul da doğruysa TRUE, aksi halde FALSE döner.Örnek: (3 < 5) & (2 < 4) sonucu TRUE
· | → VEYA (OR) operatörü. Koşullardan en az biri doğruysa TRUE döner.Örnek: (3 < 5) | (10 < 5) sonucu TRUE
· ! → DEĞİL (NOT) operatörü. Mantıksal sonucu tersine çevirir.Örnek: !(3 < 5) sonucu FALSE
Bu operatörler özellikle koşullu ifadelerde (if, while, subset, filter) sıkça kullanılır ve R’de veri analizi ya da istatistiksel modellemede temel mantıksal yapı taşlarını oluşturur.
Veri içerisine girip işlem yapacaksak [ ] parantezini kullanırız.
Deneme <- 1:10 (1’den 10’a kadar sıralar.)
Deneme [deneme < 6] ( O veri içinden 6’dan küçük sayıları sıralar.)
Matematiksel İşlemler
*, +, -, /, ^, sqrt, abs, log, log2, exp(3)
R dilinde matematiksel işlemler hem temel aritmetik operatörlerle hem de özel matematiksel fonksiyonlarla yapılır. Aşağıda her birinin işlevi kısaca açıklanmıştır:
· → Çarpma işlemi yapar.Örnek: 6 3 sonucu 18
· + → Toplama işlemi yapar.Örnek: 4 + 2 sonucu 6
· - → Çıkarma veya negatif değer işlemi yapar.Örnek: 7 - 5 sonucu 2, -8 negatif sekiz anlamındadır.
· / → Bölme işlemi yapar.Örnek: 10 / 2 sonucu 5
· ^ → Üs alma işlemi yapar.Örnek: 2 ^ 3 sonucu 8 (yani 2³)
· sqrt(x) → Karekök fonksiyonudur.Örnek: sqrt(9) sonucu 3
· abs(x) → Mutlak değer fonksiyonudur; sayının işaretini kaldırır.Örnek: abs(-7) sonucu 7
· log(x) → Doğal logaritma (taban e) fonksiyonudur.Örnek: log(10) ≈ 2.302585
· log2(x) → 2 tabanında logaritma alır.Örnek: log2(8) sonucu 3 (çünkü 2³ = 8)
· exp(x) → e üzeri x (üstel) fonksiyonudur.Örnek: exp(3) ≈ 20.0855 (yani e³)
Bu fonksiyonlar R’de matematiksel hesaplamalar, istatistiksel modelleme ve veri dönüşümleri için en sık kullanılan temel araçlardır. Özellikle log, exp ve sqrt fonksiyonları veri normalleştirme ve olasılık hesaplamalarında çok önemlidir.
İşlemlerin konsolda direkt sonucu gözükmesi için () parantez içine almalıyız.
(d = a+b)
a=10
b=20
Temel Fonksiyonlar
R dilinde temel fonksiyonlar, çalışma ortamını yönetmek, dosya ve dizinlerle etkileşim kurmak, paketleri yüklemek ve nesneleri incelemek için kullanılır. Aşağıda her bir fonksiyonun kısa açıklaması yer alır:
· sessionInfo() → Mevcut R oturumunun bilgilerini verir (R sürümü, yüklü paketler, sistem bilgisi vb.).Kullanım: sessionInfo()
· getwd() → Şu anda çalışılan dizinin (klasörün) yolunu gösterir.Kullanım: getwd()
· setwd("...") → Çalışma dizinini belirtilen yola değiştirir.Kullanım: setwd("C:/R_Projeleri")
· dir() veya list.files() → Geçerli dizindeki dosya ve klasörleri listeler.Kullanım: dir() veya list.files()
· file.exists("dosya_adi") → Belirtilen dosya veya klasörün var olup olmadığını kontrol eder (TRUE/FALSE döner).Kullanım: file.exists("veri.csv")
· dir.create("klasor_adi") → Yeni bir klasör oluşturur.Kullanım: dir.create("yeni_klasor")
· ls() → Çalışma ortamındaki tüm nesneleri (değişken, veri seti vb.) listeler.Kullanım: ls()
· rm() → Ortamdan nesne siler.Kullanım: rm(x) veya rm(list = ls()) (tüm nesneleri siler)
· available.packages() → CRAN üzerinde indirilebilecek mevcut R paketlerini listeler.Kullanım: available.packages()
· install.packages("paket_adi") → Belirtilen paketi CRAN’dan indirip yükler.Kullanım: install.packages("ggplot2")
· search() → Aktif olarak yüklü ortamları ve paketleri listeler.Kullanım: search()
· library("paket_adi") → Yüklü bir paketi çalışma alanına dahil eder.Kullanım: library(dplyr)
· data() → R ile birlikte gelen örnek veri setlerini listeler veya belirli birini yükler.Kullanım: data() veya data(mtcars)
· options(digits = n) → Sayısal sonuçlarda gösterilecek basamak sayısını ayarlar.Kullanım: options(digits = 4)
· object.size(x) → Bir nesnenin bellek boyutunu bayt cinsinden gösterir.Kullanım: object.size(veri)
· head(x) → Bir veri setinin veya vektörün ilk birkaç satırını gösterir (varsayılan: 6).Kullanım: head(mtcars)
· typeof(x) → Bir nesnenin veri türünü belirtir (ör. “double”, “character”, “list” vb.).Kullanım: typeof(x)
· is.vector(x) → Nesnenin bir vektör olup olmadığını kontrol eder (TRUE/FALSE döner).Kullanım: is.vector(x)
Bu fonksiyonlar R ortamında çalışma alanı yönetimi, paket işlemleri ve veri yapılarının incelenmesi için temel araçlardır. R’yi verimli kullanabilmek için bu komutlara hâkim olmak oldukça önemlidir.
Atomik Vektörler
R dilinde veri yapılarının temeli nesnelere (objects) dayanır. R’da her şey bir nesne olarak kabul edilir; değişkenler, fonksiyonlar, veri setleri, hatta grafikler bile nesne yapısındadır. Bu nesneler, içinde tuttukları verilerin homojen (tek tip) ya da heterojen (farklı tip) olmasına göre sınıflandırılır:
Boyut | Homojen Yapılar | Heterojen Yapılar |
1D | Atomik Vektör (Atomic Vector) | Liste (List) |
2D | Matris (Matrix) | Veri Çerçevesi (Data Frame) |
nD | Array (Dizi) | — |
R programlama dilinde verilerin temel yapı taşları dört ana grupta toplanır: vektör, liste, matris ve data frame. Bu dört yapı, R’ın veri işleme mantığını anlamak için başlangıç noktasıdır. Ancak bunların arasında vektör özel bir yere sahiptir, çünkü R’daki hemen her şeyin temelinde vektör yapısı bulunur.
R’da vektör, birden fazla değeri tek bir nesnede tutan en basit veri yapısıdır. Eğer bu değerler aynı türden (örneğin hepsi sayısal ya da hepsi karakter) ise bu yapıya atomik vektör denir. Atomik vektörler R’da homojen veri tipleridir; yani içindeki tüm öğelerin türü aynıdır.
Atomik vektörler beş ana türe ayrılır:
· Character → Metin değerleri içerir.Örnek: c("Ali", "Veli", "Ayşe")
· Numeric (real/decimal) → Ondalıklı veya reel sayıları içerir.Örnek: c(1.2, 3.5, 4.8)
· Integer (L) → Tam sayılardan oluşur ve “L” harfiyle tanımlanır.Örnek: c(1L, 2L, 3L)
· Logical → Mantıksal değerler alır: TRUE veya FALSE.Örnek: c(TRUE, FALSE, TRUE)
· Complex → Karmaşık sayılar içerir.Örnek: c(2+3i, 1-4i)
Buna karşılık, bir vektör farklı türden değerler içeriyorsa artık atomik değil, liste (list) haline gelir. Listeler heterojen yapılardır; içinde hem sayılar hem karakterler hem de başka vektörler bulunabilir.
Örnek:
liste1 <- list(3.14, "merhaba", TRUE, c(1,2,3))
Bu örnekte liste aynı anda farklı veri türlerini taşır. Dolayısıyla listeler, atomik vektörlere göre daha esnek ama daha karmaşık yapılardır.
Kısacası, R’da veri yapılarının hiyerarşisi vektörlerden başlar; diğer tüm yapılar (matris, data frame, liste) bu temel üzerine inşa edilir. Vektörleri anlamak, R’ın çalışma mantığını çözmenin ilk adımıdır.
Veri Tipleri
R dilinde veri tipleri (data types), verilerin nasıl saklandığını ve işlem gördüğünü belirleyen temel yapılardır. Birden fazla değeri bir arada tutmak için R’da genellikle c() fonksiyonu kullanılır.
Örneğin:
a <- c("a", "b", "c")
Burada c() (“combine”) fonksiyonu birden fazla değeri tek bir vektörde birleştirir.Tırnak işaretleri (" ") içindeki değerler karakter (character) tipindedir; yani R bu değerleri metin olarak algılar. Eğer tırnak kullanılmazsa, R bu ifadeleri değişken ya da sayısal değer olarak yorumlamaya çalışır.
🔹 Matrix (Matris)
Matrisler, tek bir veri türünden (homojen) oluşan, iki boyutlu (satır–sütun) yapılardır.Yani bir matris hem vektörlerin uzantısıdır hem de homojenliğini korur.
Örnek:
m <- matrix(1:6, nrow = 2, ncol = 3)
Bu komut, 2 satır ve 3 sütundan oluşan, yalnızca sayısal değerler içeren bir matris oluşturur.Matrislerde tüm elemanlar aynı türde olmak zorundadır. Eğer içine karakter karışırsa tüm elemanlar karaktere dönüşür.
🔹 Data Frame (Veri Çerçevesi)
Data frame yapısı ise R’da en sık kullanılan veri türlerinden biridir.Matristen farkı, birden fazla veri türünü (heterojen) aynı yapıda barındırabilmesidir.Her sütun kendi içinde homojen (örneğin sadece sayılar ya da sadece karakterler) olabilir, ancak sütunlar arası farklı türler bulunabilir.
Örnek:
df <- data.frame(
isim = c("Ali", "Ayşe", "Veli"),
yas = c(25, 30, 28),
mezun = c(TRUE, FALSE, TRUE)
)
Burada:
· isim sütunu → character
· yas sütunu → numeric
· mezun sütunu → logical tipindedir.
Yani data frame, matrisin aksine birden fazla veri tipini destekleyen, tablo biçiminde bir yapıdır.
Özetle:
Veri Yapısı | Boyut | Veri Türü | Örnek Kullanım |
Vektör | 1D | Tek tip (homojen) | c(1,2,3) |
Matris | 2D | Tek tip (homojen) | matrix(1:6, 2, 3) |
Data Frame | 2D | Farklı tipler (heterojen) | data.frame(ad, yas, mezun) |
Liste | 1D/nd | Farklı tipler (heterojen) | list("a", 1, TRUE) |
Bu nedenle R’da veriyi saklarken matris daha çok sayısal analizlerde, data frame ise veri analizi ve istatistiksel modelleme işlemlerinde tercih edilir.
Fonksiyonlar ve Fonksiyon Okuryazarlığın Önemi
R programlama dilinde fonksiyonlar, belirli girdiler (input) alarak bunlar üzerinde işlemler yapan ve bir çıktı (output) üreten yapılardır. Matematikteki fonksiyon kavramına oldukça benzer biçimde, R’daki fonksiyonlar da tekrar eden işlemleri kolaylaştırmak, karmaşık hesaplamaları düzenlemek ve kodu daha okunabilir hale getirmek için kullanılır.
Örneğin, mean() fonksiyonu bir veri kümesinin ortalamasını hesaplar:
mean(c(1, 2, 3, 4))
# çıktı: 2.5
Burada c(1, 2, 3, 4) fonksiyonun input kısmıdır, 2.5 ise output kısmıdır.
Fonksiyonlar R’ın temel gücünü oluşturur çünkü neredeyse tüm işlemler fonksiyonlar aracılığıyla yapılır. Veri okumak (read.csv()), görselleştirme yapmak (plot()), istatistiksel analiz uygulamak (lm()), hatta yeni nesne oluşturmak bile fonksiyonlarla mümkündür. Bu nedenle R’da fonksiyon okuryazarlığı, yani bir fonksiyonun ne yaptığını, hangi argümanları kabul ettiğini ve ne tür çıktı ürettiğini anlayabilme becerisi, verimli bir çalışma için son derece önemlidir.
Fonksiyon okuryazarlığını geliştirmenin en pratik yollarından biri, R’ın yardım sistemini kullanmaktır.
Help sekmesinde veya doğrudan komut satırında şu biçimlerde sorgulama yapılabilir:
· ?fonksiyon_adi → Örneğin ?mean yazıldığında, mean() fonksiyonunun ne işe yaradığını, hangi argümanları kullandığını ve örnek uygulamalarını gösterir.
· help("fonksiyon_adi") → Aynı işlevi yapar.
· help.search("anahtar_kelime") → Belirli bir kavramla ilişkili tüm fonksiyonları arar.
· Ayrıca Help panelindeki arama çubuğuna anahtar kelimeler (örneğin “regression”, “plot”, “summary”) yazıldığında o konuya ilişkin fonksiyonların listesi görüntülenir.
Fonksiyon okuryazarlığı sadece teknik bilgi değil, aynı zamanda programlama düşüncesinin gelişmesidir. Bir araştırmacı ya da veri analisti, fonksiyonları anlamayı öğrendikçe yalnızca komut ezberlemekle kalmaz; hangi problemi hangi araçla çözebileceğini de kavrar. Dolayısıyla R’da fonksiyonları tanımak, bir dilin kelime hazinesini öğrenmek gibidir: Ne kadar fazla fonksiyon tanırsak, o kadar akıcı ve üretken bir şekilde analiz yapabiliriz.
Ne Zaman Fonksiyon Yazılır
R’da ne zaman fonksiyon yazılır sorusunu şöyle yanıtlamak faydalı: tekrar eden, aynı mantığa sahip dönüşümleri veya analiz adımlarını birden çok veri setine/nesneye uygulamanız gerektiğinde fonksiyon yazmak hem hata riskini azaltır hem de kodunuzu okunur, yeniden kullanılabilir hale getirir. R’da data.frame oluşturma ve sütunlara erişim
# data.frame oluşturma (satır satır, okunaklı biçimde yazılabilir)
df <- data.frame(
a = 1:20,
b = 20:39
)# sütuna erişim yöntemleri
df$a # $ ile isimle erişim (en sık kullanılan)
df[["a"]] # köşeli parantez + isim
df[, "a"] # sütun ismiyle indeksleme
df[1, ] # ilk satır (tüm sütunlar)
df[1, "a"] # ilk satırın 'a' sütunu
Not: data.frame() içinde her sütunun uzunluğu eşit olmalıdır. Satırlandırma stilinde parantezleri aşağı taşımak ve argümanların sonuna virgül koymak kodu daha okunur kılar; örneğin yukarıdaki stil yaygındır.
RStudio editöründe metin bulmak ve değiştirmek için Ctrl+F(find) veya Ctrl+H (find & replace) kullanabilirsiniz; bir satırı veya blok seçip doğrudan düzenlemek de mümkündür. (Kısayollar işletim sistemine göre değişebilir.)
Fonksiyon yazma — temel yapı
R’daki fonksiyon bildirimi şu şekildedir:
myfun <- function(x) {
x^2
}
# veya tek satırsa:
myfun <- function(x) x^2Fonksiyonlar input alır, işlem yapar ve bir output döner (son satır otomatik olarak döndürülür veya return() ile açıkça döndürebilirsiniz).
Eğer amacınız bir veri çerçevesindeki tüm değişkenlere aynı dönüşümü uygulamaksa (ör. her sayısal sütunu kare almak), fonksiyonu temiz ve güvenli yazmak önemli. Aşağıda birkaç seçenek gösteriyorum:
1. Tüm sütunlara (sadece sayısal olanlara) fonksiyon uygulama — base R:
square_numeric <- function(df) {
df[] <- lapply(df, function(col) {
if (is.numeric(col)) {
col^2
} else {
col
}
})
df
}
df2 <- square_numeric(df)
2. dplyr ile daha okunaklı (paket yüklü ise):
library(dplyr)
square_numeric_dplyr <- function(df) {
df %>% mutate(across(where(is.numeric), ~ .x^2))
}
df2 <- square_numeric_dplyr(df)
3. Tek bir sütuna fonksiyon uygulayıp yeni sütun oluşturma:
myfun <- function(x) x^2
df$a2 <- myfun(df$a)Fonksiyon tasarımında dikkat edilecekler
· Fonksiyonunuzun girdi tiplerini ve beklenen boyutları kontrol edin (stopifnot() veya if ile kontrol).
· Fonksiyon, veri çerçevesi döndürecekse genellikle aynı sütun isimleri korunur; dönüşüm başarısızsa anlamlı hata mesajı verin.
· Yan etkilerden kaçının: fonksiyon içinde global nesneleri değiştirmek yerine (örn. global df) çıktı döndürüp atama yapmayı tercih edin (df2 <- myfun(df)).
Basit input kontrolü örneği:
safe_square <- function(df) {
if (!is.data.frame(df)) stop("Girdi bir data.frame olmalı.")
df[] <- lapply(df, function(col) if (is.numeric(col)) col^2 else col)
df
}
Neden fonksiyon yazmalı?
Tekrarlayan veri temizleme/dönüşüm adımları için fonksiyon yazmak:
· Kod tekrarını azaltır,
· Test etmeyi kolaylaştırır,
· Analiz adımlarını belgelemeyi sağlar (bir fonksiyonun ismi ne yaptığını açıklar),
· Farklı veri setlerine aynı mantığı güvenle uygulamanıza olanak verir.
Sonuç olarak, fonksiyon yazmayı öğrenmek R ile veri analizi yaparken size büyük esneklik ve yeniden kullanım sağlar.





Yorumlar