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.
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, R’ın dosyaları nereden okuduğunu ve dosyaları nereye kaydettiğini
belirler.
getwd() : mevcut dizini gösterir
setwd(“klasor_yolu”) : dizini değiştirir
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.
*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
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
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
Ö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
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
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, 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
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."
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"
)
}
## *
## *
## *
## *
## *