Öğrenme Günlüğü

Bu hafta datacamp alıştırmaları ile birlikte fonksiyonlar ve döngüler üzerine çalıştım.çalışma notları çıkararak küçük örnekler çözdüm.

Çalışma Notları

Çalışma alanı Düzenleme

Ortamdaki nesneleri listeleme: ls() / objects()

Detaylı liste: ls.str() (nesneleri ayrıntılı gösterir).

Nesne silme: rm(nesne_adi)

Her şeyi temizleme: rm(list = ls())

Konsol temizleme: CTRL + L

Çalışma Dizini

Çalışma dizini, R’ın dosyaları nereden okuduğunu ve dosyaları nereye kaydettiğini

belirler.

getwd() : mevcut dizini gösterir

setwd(“klasor_yolu”) : dizini değiştirir

Koşullu Yapılar

if / else : Koşul doğruysa bir işlem,Yanlışsa başka bir işlem yapılır.

ifelse(): Vektörler için uygundur.Her bir gözlem için koşulu ayrı ayrı değerlendirir. Özellikle veri setlerinde tercih edilir.

For Döngüsü

*Nesne döngüden önce tanımlanır Örnek :

# 1’den 5’e kadar toplam

toplam <- 0
for(i in 1:5){
  toplam <- toplam + i
}
toplam
## [1] 15
  • Vektörler Örnek :
x <- c(10, 20, 30)
sonuc <- numeric(length(x))
sonuc
## [1] 0 0 0
for(i in 1:length(x)){
  sonuc[i] <- x[i] * 2
}
sonuc
## [1] 20 40 60
  • İç içe for döngüsü Örnek:
for(i in 1:3){
  for(j in 1:2){
    cat("i =", i, "j =", j, "\n")
  }
}
## i = 1 j = 1 
## i = 1 j = 2 
## i = 2 j = 1 
## i = 2 j = 2 
## i = 3 j = 1 
## i = 3 j = 2

break: Döngüyü tamamen durdurur next: Atlatır

Örnek:

for(i in 1:10){
  if(i == 5) break
  print(i)
}
## [1] 1
## [1] 2
## [1] 3
## [1] 4
for(i in 1:5){
  if(i == 3) next
  print(i)
}
## [1] 1
## [1] 2
## [1] 4
## [1] 5

while döngüsü

Örnek: Geometrik dizi oluşturma

n <- 5
dizi <- c()

i <- 1
dizi[1] <- 3

while(i < n){
  dizi[i + 1] <- dizi[i] * 2
  i <- i + 1
}

dizi
## [1]  3  6 12 24 48

Fonksiyon Notları

cbind():Birden fazla vektörü, matrisi veya veri çerçevesini sütun sütun birleştirir. rbind() :Satır ekler (alt alta)

numeric(): belirtilen uzunlukta sayısal bir vektör oluşturur ve varsayılan olarak tüm değerleri 0’dır. Örnek: numeric(3) → 0 0 0

character(): belirtilen uzunlukta karakter tipinde bir vektör oluşturur ve varsayılan değeri boş metindir. Örnek: character(2) → “” “”

factor(): verilen değerleri kategorik düzeyler hâline getirerek faktör yapısı oluşturur. Örnek: factor(c(“A”,“B”,“A”)) → düzeyler: A, B

as.* dönüştürür

as.numeric(), bir nesneyi sayısal (numeric) türe dönüştürür.

as.character(), bir nesneyi karakter (metin) tipine dönüştürür

as.factor(), bir nesneyi faktör tipine dönüştürerek kategorik değişken olarak tanımlanmasını sağlar.

rep(): bir değeri veya vektörü belirtilen sayıda tekrar ederek yeni bir vektör oluşturur

Fonksiyon Yazma

içi dolu ve boş kareler çizen fonksiyon örneği:

kare_ciz <- function(n, dolu = TRUE){
  
  for(i in 1:n){
    for(j in 1:n){
      if(dolu || i == 1 || i == n || j == 1 || j == n){
        cat("* ")
      } else {
        cat("  ")
      }
    }
    cat("\n")
  }
}


kare_ciz(5, dolu = TRUE)   # içi dolu
## * * * * * 
## * * * * * 
## * * * * * 
## * * * * * 
## * * * * *
kare_ciz(5, dolu = FALSE)  # içi boş
## * * * * * 
## *       * 
## *       * 
## *       * 
## * * * * *

apply Ailesi

apply ailesi, döngü yazmadan tekrar eden işlemler yapmayı sağlar.

lapply() : Bir liste veya vektörün her elemanına fonksiyon uygulayıp sonucu liste olarak döndürür.

sapply(): lapply gibi çalışır, ancak sonucu vektör veya matris hâline getirir.

lapply ve sapply arasındaki temel fark, çıktının liste mi yoksa sadeleştirilmiş yapı mı olduğudur.

tapply() : Bir değişkeni, başka bir değişkene göre gruplandırarak özetler.

#apply

M <- matrix(1:6, nrow = 2)
apply(M, 2, mean)   # sütun ortalamaları
## [1] 1.5 3.5 5.5
#lapply

L <- list(a = 1:3, b = 4:6)
lapply(L, mean)
## $a
## [1] 2
## 
## $b
## [1] 5
#sapply

sapply(L, mean)
## a b 
## 2 5
#tapply

not <- c(70, 80, 90, 60)
cinsiyet <- c("K", "E", "K", "E")
tapply(not, cinsiyet, mean)
##  E  K 
## 70 80

Sıra Sizde Çözümleri

1.Örnek Veri Seti

set.seed(1786)
ornek<-exp(matrix(rnorm(2000),nrow=100))
index1.temp<-sample(1:100,10)
index2.temp<-sample(1:20,10)
for(i in 1:10){
 ornek[index1.temp[i],index2.temp[i]]<--1
 }

Çözüm

top_neg <- 0

for(i in 1:nrow(ornek)){
  satir <- ornek[i, ]
  
   #Satırlardaki negatif sayısını belirleme
 
   neg <- sum(satir < 0)
  
  if (neg == 0) {
  
    # Negatif Sayı yoksa ortalamayı yaz
    
    satir_ort <- mean(satir)
    
    print(paste("Satir", i, "ortalaması", satir_ort))
  } else {
  
     # Negatif sayı varsa uyarı
    
    print(paste("Satir", i, "negatif sayi icermektedir."))
   
     # Toplam
    
    top_neg <- top_neg + neg
  }
  
  # 3'ten fazla negatif sayı varsa;
  
   if (top_neg > 3) {
    print("Cok sayida negatif sayi var, dongu durduruluyor.")
    break
  }
}
## [1] "Satir 1 ortalaması 1.81024640410365"
## [1] "Satir 2 ortalaması 1.38518610357355"
## [1] "Satir 3 ortalaması 1.91306477718819"
## [1] "Satir 4 ortalaması 1.4112379414075"
## [1] "Satir 5 ortalaması 1.4449874985066"
## [1] "Satir 6 ortalaması 1.45095623366252"
## [1] "Satir 7 ortalaması 1.28395242730511"
## [1] "Satir 8 ortalaması 1.09256285552594"
## [1] "Satir 9 ortalaması 1.42368154628106"
## [1] "Satir 10 negatif sayi icermektedir."
## [1] "Satir 11 ortalaması 1.63867357063309"
## [1] "Satir 12 negatif sayi icermektedir."
## [1] "Satir 13 ortalaması 1.47012239341985"
## [1] "Satir 14 ortalaması 1.68760963291761"
## [1] "Satir 15 ortalaması 1.51554665095691"
## [1] "Satir 16 ortalaması 1.99518274468864"
## [1] "Satir 17 ortalaması 1.47942292790106"
## [1] "Satir 18 ortalaması 1.4444947260594"
## [1] "Satir 19 ortalaması 1.54378752827146"
## [1] "Satir 20 ortalaması 2.17983862702061"
## [1] "Satir 21 ortalaması 1.48707990280766"
## [1] "Satir 22 ortalaması 2.10918427665028"
## [1] "Satir 23 ortalaması 2.53701879215026"
## [1] "Satir 24 negatif sayi icermektedir."
## [1] "Satir 25 negatif sayi icermektedir."
## [1] "Cok sayida negatif sayi var, dongu durduruluyor."

2. Geometrik Şekil Çizimleri

n <- 5   

# İçi dolu kare
for(i in 1:n){
  cat(rep("* ", n), "\n")
}
## *  *  *  *  *  
## *  *  *  *  *  
## *  *  *  *  *  
## *  *  *  *  *  
## *  *  *  *  *
# İçi boş kare

for(i in 1:n){
  for(j in 1:n){
    if(i == 1 || i == n || j == 1 || j == n){
      cat("* ")
    } else {
      cat("  ")
    }
  }
  cat("\n")
}
## * * * * * 
## *       * 
## *       * 
## *       * 
## * * * * *
# Sola dayalı üçgen

for (i in 1:n) {
  cat(rep("*", i), "\n")
}
## * 
## * * 
## * * * 
## * * * * 
## * * * * *
# Eşkenar Üçgen

for(i in 1:n){
  bosluk <- n - i
  yildiz <- 2*i - 1
  
  cat(
    rep(" ", bosluk),
    rep("*", yildiz),
    "\n"
  )
}
##         * 
##       * * * 
##     * * * * * 
##   * * * * * * * 
##  * * * * * * * * *
# Dik Üçgen

for(i in 1:n){
  cat(rep("*", i), "\n")
}
## * 
## * * 
## * * * 
## * * * * 
## * * * * *
# Diyagonal

for(i in 1:n){
  cat(
    rep(" ", i-1),
    "*",
    "\n"
  )
}
##  * 
##   * 
##     * 
##       * 
##         *
# Ters Diyagonal

for(i in 1:n){
  cat(
    rep(" ", n-i),
    "*",
    "\n"
  )
}
##         * 
##       * 
##     * 
##   * 
##  *