Bu haftaki dersimizde kontrol yapılarından next()
ve
break()
ile birlikte fonksiyon başlıkları üzerinde
çalıştık.
next()
Döngüyü sadece bir koşulda çalıştırmak istemezsek next()
argümanını kullanabiliriz. Aşağıdaki kodla 1 ile 10 arasındaki sayıları
yazdır fakat çift sayıları atla demiş oluyoruz. (Kendi
Örneğim)
for(i in 1:10){
if(i %%2== 0 ){
next
}
print (i)}
## [1] 1
## [1] 3
## [1] 5
## [1] 7
## [1] 9
set.seed(41)
sayilar <- sample(0:10, 30, replace=TRUE)
sayilar
## [1] 7 2 4 7 9 5 5 1 1 10 5 1 4 5 0 3 0 3 1 3 5 1 1 3 3
## [26] 4 2 0 5 10
Aşağıdaki kodla ise 0 ile 10 arasında rastegele oluşturulan 30 adet sayıdan 0 haricindeki bir sayı ile karşılaşıldığında sayının çarpmaya göre tersini yazdırmasını sağladık.
set.seed(41)
sayilar <- sample(0:10,30,replace=TRUE)
for(i in sayilar){
if(i==0){
next
}
cat("1/",i,sep="","\n")}
## 1/7
## 1/2
## 1/4
## 1/7
## 1/9
## 1/5
## 1/5
## 1/1
## 1/1
## 1/10
## 1/5
## 1/1
## 1/4
## 1/5
## 1/3
## 1/3
## 1/1
## 1/3
## 1/5
## 1/1
## 1/1
## 1/3
## 1/3
## 1/4
## 1/2
## 1/5
## 1/10
break()
Döngüyü sadece belirli bir koşulda durdurmak için ise
break()
argümanını kullanabiliriz.
Aşağıdaki kodla 1 den 12 ye sayıları yazdırmaya başlayıp 3 e geldiğinde sayı yazıdrmayı durdurup 1 ve 2 çıktısını vermiş oluyor.
for(i in 1:12){
if(i==3){
break
}
print (i)}
## [1] 1
## [1] 2
set.seed(41)
sayilar1 <- sample(-5:5,10,replace = TRUE)
sayilar1
## [1] 2 -3 -1 2 4 0 0 -4 -4 5
Aşağıdaki kodla sayilar1 kümesinin elemanları yazdırılmaya başlanıp negatif sayı görüldüğünde döngü durmuş oluyor.
for(i in sayilar1){
if(i < 0 ){
break
}
print (i)}
## [1] 2
Aşağıdaki kod yukarıdakinden farklı olarak 2 ve -3 sayılarını yazdırdıktan sonra döngüyü durduruyor.
for(i in sayilar1){
print(i)
if(i<0){
break
}
}
## [1] 2
## [1] -3
Aşağıdaki kodla verilen şehirleri yazdırmaya başlayıp harf sayısı 7 olan şehre geldiğinde döngüyü durduruyor. (Kendi Örneğim)
sehirler <- c( "Maras", "Antep", "Urfa", "Bayburt", "Hatay" )
for(sehir in sehirler){
if(nchar(sehir)==7 ){
break
}
print (sehir)}
## [1] "Maras"
## [1] "Antep"
## [1] "Urfa"
iç içe for Döngüleri
x <- matrix(1:6, 2, 3)
x
## [,1] [,2] [,3]
## [1,] 1 3 5
## [2,] 2 4 6
for(i in seq_len(nrow(x))) {
for(j in seq_len(ncol(x))) {
print(x[i, j])
}
}
## [1] 1
## [1] 3
## [1] 5
## [1] 2
## [1] 4
## [1] 6
m2 <- matrix(0,nrow=5,ncol=5)
m2
## [,1] [,2] [,3] [,4] [,5]
## [1,] 0 0 0 0 0
## [2,] 0 0 0 0 0
## [3,] 0 0 0 0 0
## [4,] 0 0 0 0 0
## [5,] 0 0 0 0 0
Aşağıdaki kodla matrisin satır ve sütun indisleri olan i ve j değerlerini çarparak ilgili kısma yazdırabiliriz.
for(i in 1:nrow(m2)){
for(j in 1:ncol(m2)){
m2[i,j] <- i*j
}
}
m2
## [,1] [,2] [,3] [,4] [,5]
## [1,] 1 2 3 4 5
## [2,] 2 4 6 8 10
## [3,] 3 6 9 12 15
## [4,] 4 8 12 16 20
## [5,] 5 10 15 20 25
Aşağıdaki kodla derse yaptığımıza benzer şekilde i ninci satırın j ninci kuvvetini alarak yeni bir matris oluşturdum. (Kendi Örneğim)
m4 <- matrix(1,nrow = 3, ncol=3)
m4
## [,1] [,2] [,3]
## [1,] 1 1 1
## [2,] 1 1 1
## [3,] 1 1 1
for(i in 1:nrow(m4)){
for(j in 1:ncol(m4)){
m4[i,j] <- i^j
}
}
m4
## [,1] [,2] [,3]
## [1,] 1 1 1
## [2,] 2 4 8
## [3,] 3 9 27
create_matrix <- function(n) {
matrix <- outer(1:n, 1:n, FUN = "*")
if (n > 10) {
matrix <- matrix[1:10, 1:10]
}
return(matrix)
}
n <- 3
result <- create_matrix(n)
print(result)
## [,1] [,2] [,3]
## [1,] 1 2 3
## [2,] 2 4 6
## [3,] 3 6 9
fibonacci_for <- function(n) {
fib <- numeric(n)
fib[1] <- 1
fib[2] <- 1
for (i in 3:n) {
fib[i] <- fib[i - 1] + fib[i - 2]
}
return(fib)
}
n <- 10
result_for <- fibonacci_for(n)
print(result_for)
## [1] 1 1 2 3 5 8 13 21 34 55
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
}
head(ornek,6)
## [,1] [,2] [,3] [,4] [,5] [,6] [,7]
## [1,] 0.5549525 0.3247338 0.5236032 0.3821027 0.4187483 0.1588847 5.226161
## [2,] 0.5671734 1.2431592 0.8812069 2.6695443 0.6984453 1.0838792 1.079946
## [3,] 4.8068457 0.3449856 0.6079096 0.9194116 1.5361330 1.9082522 0.671977
## [4,] 1.3509234 2.3569582 0.1931423 4.0707377 0.3527276 2.3498825 1.198514
## [5,] 0.9012032 0.2310683 0.2317487 1.3809955 0.9168741 0.6237213 1.609403
## [6,] 1.2331483 1.1066056 0.3546027 0.3705946 0.9002303 0.2528151 3.337512
## [,8] [,9] [,10] [,11] [,12] [,13] [,14]
## [1,] 2.6280057 1.2251526 0.4760966 5.2379018 1.4782655 1.3761338 1.0202608
## [2,] 2.2087385 0.5195551 0.3757409 0.9004808 0.7409205 2.0543842 0.3668661
## [3,] 1.5310016 0.6735007 2.2069776 0.5060078 0.7171477 1.2378655 0.3651527
## [4,] 2.5592899 1.8205257 1.2624052 0.1524106 0.3828322 1.2406799 0.7954326
## [5,] 1.1005990 1.0619758 2.1047783 2.7816902 1.4010878 0.6140937 0.5136842
## [6,] 0.9799103 2.7520425 2.5407624 1.3889136 0.4346808 1.0637950 0.1859157
## [,15] [,16] [,17] [,18] [,19] [,20]
## [1,] 0.1437680 4.1807643 1.7389423 3.0760640 1.550557 4.4838291
## [2,] 3.8674407 1.9349214 0.6333922 0.4862532 5.275571 0.1161029
## [3,] 1.4724240 0.5971116 11.5869157 0.7580736 4.755297 1.0583051
## [4,] 0.1243085 0.8376231 1.3723291 2.0884571 2.506128 1.2094517
## [5,] 6.2971803 0.8422164 1.5335222 0.3079718 2.729447 1.7164885
## [6,] 3.8052219 2.1611055 0.3280288 2.7773368 1.726558 1.3193446
set.seed(1786)
ornek <- exp(matrix(rnorm(2000), nrow = 100))
index1.temp <- sample(1:100, 10)
index2.temp <- sample(1:20, 10)
# Negatif değerleri yerleştiriyoruz
for(i in 1:10){
ornek[index1.temp[i], index2.temp[i]] <- -1
}
# Satırlarda negatif sayı kontrolü
negative_count <- 0
for(i in 1:nrow(ornek)) {
# Satırda negatif sayı olup olmadığını kontrol et
if (any(ornek[i, ] < 0)) {
print(paste("Satır", i, "negatif sayı bulunmaktadır"))
negative_count <- negative_count + 1
} else {
print(paste("Satır", i, "ortalaması:", mean(ornek[i, ])))
}
# Eğer toplam negatif sayılar 3'ü geçerse döngüyü durdur
if (negative_count > 3) {
print("Çok sayıda negatif sayı bulundu, döngü durduruluyor.")
break
}
}
## [1] "Satır 1 ortalaması: 1.81024640410365"
## [1] "Satır 2 ortalaması: 1.38518610357355"
## [1] "Satır 3 ortalaması: 1.91306477718819"
## [1] "Satır 4 ortalaması: 1.4112379414075"
## [1] "Satır 5 ortalaması: 1.4449874985066"
## [1] "Satır 6 ortalaması: 1.45095623366252"
## [1] "Satır 7 ortalaması: 1.28395242730511"
## [1] "Satır 8 ortalaması: 1.09256285552594"
## [1] "Satır 9 ortalaması: 1.42368154628106"
## [1] "Satır 10 negatif sayı bulunmaktadır"
## [1] "Satır 11 ortalaması: 1.63867357063309"
## [1] "Satır 12 negatif sayı bulunmaktadır"
## [1] "Satır 13 ortalaması: 1.47012239341985"
## [1] "Satır 14 ortalaması: 1.68760963291761"
## [1] "Satır 15 ortalaması: 1.51554665095691"
## [1] "Satır 16 ortalaması: 1.99518274468864"
## [1] "Satır 17 ortalaması: 1.47942292790106"
## [1] "Satır 18 ortalaması: 1.4444947260594"
## [1] "Satır 19 ortalaması: 1.54378752827146"
## [1] "Satır 20 ortalaması: 2.17983862702061"
## [1] "Satır 21 ortalaması: 1.48707990280766"
## [1] "Satır 22 ortalaması: 2.10918427665028"
## [1] "Satır 23 ortalaması: 2.53701879215026"
## [1] "Satır 24 negatif sayı bulunmaktadır"
## [1] "Satır 25 negatif sayı bulunmaktadır"
## [1] "Çok sayıda negatif sayı bulundu, döngü durduruluyor."
# Boyut
n <- 5
# Kareyi yazdırma
for (i in 1:n) {
for (j in 1:n) {
cat("* ")
}
cat("\n") # Satır sonu
}
## * * * * *
## * * * * *
## * * * * *
## * * * * *
## * * * * *
FONKSİYONLAR
R da fonksiyonlar belirli işlemleri yerine getirebilmek için kullandığımız yapılardır.Fonksiyonlar ya R da hazır olarak buluunur ya da bunları kendimiz oluştururuz. Aşağıdaki fonksiyonla istenen sözü yazdırabiliriz.
f <- function(){
cat("Hayat yaşamaya değer\n")
}
f ()
## Hayat yaşamaya değer
Aşağıdaki kodla ise “Öğrenmek Eğlenceli” yi 4 kez yazdıran bir fonksiyon yazdırmış olacağız.( Kendi Örneğim)
tekraryaz <- function(num){
for(i in seq_len(num)){
cat("Öğrenmek Eğlenceli\n")
}
}
tekraryaz(4)
## Öğrenmek Eğlenceli
## Öğrenmek Eğlenceli
## Öğrenmek Eğlenceli
## Öğrenmek Eğlenceli
Aşağıdaki kodla ise önce “Galatasaray Şampiyon” yazısını 2 kez döndürüp sonra da yazılan toplam karakter sayısını hesaplatabiliriz. ( Kendi Örneğim)
tekrarYazdir <- function(kelime, tekrar) {
for(i in seq_len(tekrar)) {
cat(kelime, "\n")
}
toplamKarakter <- nchar(kelime) * tekrar
toplamKarakter
}
tekrarYazdir("Galatasaray Şampiyon", 2)
## Galatasaray Şampiyon
## Galatasaray Şampiyon
## [1] 40