Dr. Kubra Atalay Kabasakal
Aralık 2021
Döngüler diğer bütün programa dillerinde sıklıkla kullanılan akış kontrolü (flow control) mekanizmasının bir parçasıdır.
Her ne kadar R vektörel elementler üzerine kurulmuş olsa da bazı durumlarda döngülerin kullanılması gerekebilir.
Örneğin, simulasyon çalışmaları genellikle iterasyonel ve tekrar eden süreçleri içermektedir.
Döngüler sonuç elde etmek yerine süreçteki işlemleri dikkate aldığından, simulasyon çalışmalarında kullanılır.
for()
while()
repeat()
for() döngüsü ile belirlenen sayıda işlem tekrarı yapılırken while() ya da repeat() döngülerinde bir sayaç ya da bir dizin ile kontrol sağlanarak işlemlerin tekrarlı yapılmasını sağlar.
for() bir vektör, liste ya da matris içindeki her bir elemanın bir değişken yardımıyla belirlenen komutu veya kodu sırasıyla yapması için oluşturulan bir döngüdür.
for() döngüsünün genel kullanımı aşağıdaki gibidir.
Döngüde indeks değişkeni herhangi bir nesne ile tanımlanabilir. Örneğin i
Ayrıca indeks değerinin başlangıcı 1 olmak zorunda değildir.
karakter yazımında indeks i sadece tekrar amaçlı kullanılır.
Aşağıdaki çıktıyı sağlayacak kodu yazınız.
## 1 + 1 = 2
## 2 + 2 = 4
## 3 + 3 = 6
## 4 + 4 = 8
## 5 + 5 = 10
## 6 + 6 = 12
## 7 + 7 = 14
## 8 + 8 = 16
## 9 + 9 = 18
## 10 + 10 = 20
Döngüdelerde bir degişken yeniden tanımlanacak ise mutlaka döngü öncesi o değişken tanımlanmalıdır.
Oluşturulan bir matrisin satırlarında yer alan sayıların toplamını başka bir nesneye atama
cat(), paste() gibi fonksiyonları uzun bir döngüde, döngünün durumunu görmek için de kullanabilirsiniz .
islem.kontrol <- array()
for(i in 1:10){
islem.kontrol[i] <- paste("Islem ", i, " tamamlandi", sep="")
}
islem.kontrol## [1] "Islem 1 tamamlandi" "Islem 2 tamamlandi" "Islem 3 tamamlandi"
## [4] "Islem 4 tamamlandi" "Islem 5 tamamlandi" "Islem 6 tamamlandi"
## [7] "Islem 7 tamamlandi" "Islem 8 tamamlandi" "Islem 9 tamamlandi"
## [10] "Islem 10 tamamlandi"
Döngülerde her zaman i indeksini kullanmak zorunda değiliz.
Her zaman işlemi tüm elemanlara uygulamak istemeyebiliriz.
Bunun önlemek icin akış kontrolü yapmak gerekir.
Kontrol mantıksal operatörlerle ya da koşul cümleleri ile sağlanabilir.
Bazen döngüler iç içe kullanılabilir 5X5 bir matrisin her bir elemanı satır ve sütun indeksleri çarpımı olsun orneğin m[2,5]=10 olsun.
Bu işlemi yapmak için öncelikle boş bir matris oluştumak lazım.
Aşağıdaki çıktıyı elde edecek kodu oluşturmaya çalışın
## [,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
Kullanıcı tarafından belirlenen nxn boyutunda bir matris oluşturulsun.
nxn bir matrisin her bir elemanı satır ve sütun indeksleri çarpımı olsun.
örneğin m[2,5]=10 olsun.
Eger matrisin boyutları 10x10’dan büyükse sadece 10 satırını yazsın eğer matrisi boyutları 10x10’dan küçükse hepsini yazsın.
Kullancı üç girdiğinde oluşacak çıktı:
## [,1] [,2] [,3]
## [1,] 1 2 3
## [2,] 2 4 6
## [3,] 3 6 9for() DöngüsüDöngünün indeksi her zaman bir tam sayı olmak zorunda değildir.
Liste, veri seti, matris de olabilir.
if sadece numerik değer ve vektörlerle çalışmaz.
Aynı zamanda veri seti, matris ve listelerle de çalışabilir.
for() DöngüsüAşağıdaki çıktıyı elde etmek için gerekli kodu yazınız.
## 1 satirdaki degerlerin carpimi 20 olarak hesaplanmistir.
## 2 satirdaki degerlerin carpimi 42 olarak hesaplanmistir.
## 3 satirdaki degerlerin carpimi 66 olarak hesaplanmistir.
## 4 satirdaki degerlerin carpimi 92 olarak hesaplanmistir.
## 5 satirdaki degerlerin carpimi 120 olarak hesaplanmistir.
## 6 satirdaki degerlerin carpimi 150 olarak hesaplanmistir.
## 7 satirdaki degerlerin carpimi 182 olarak hesaplanmistir.
## 8 satirdaki degerlerin carpimi 216 olarak hesaplanmistir.
## 9 satirdaki degerlerin carpimi 252 olarak hesaplanmistir.
## 10 satirdaki degerlerin carpimi 290 olarak hesaplanmistir.
next() ve break()next() ve break() fonksiyonları döngülerde kontrol mekanizmasidır.
Döngüyü sadece belirli bir koşulda çalıştırmak istemezseniz next() fonksiyonunu kullanabilirsiniz.
next() ve break()Döngüyü sadece belirli bir koşulda durdurmak isterseniz break() fonksiyonunu kullanabilirsiniz.
for() DöngüsüDöngüler uzun zamanda çalışır.
for() Ödev-1Fibonacci dizisinin elemanlari 1 1 2 3 5 8 13 21 34 55 89 … dizinin elemanlarını for() döngüsü ile oluşturmaya çalışınız.
for() Ödev-2set.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
ornek veri setinde i. satırda negatif sayı yok ise çıktıda i. satırın ortalaması….dir yazsin.
Eğer veri setinde her hangi bir satırda negatif sayı var ise satır i negatif sayı bulunmaktadır.
veri setindeki satırlardaki toplam negatif sayı toplamı üçü geçerse çktıda cok sayıda negatif sayı yazsın ve döngü çalışmayı durdursun.
for() Ödev-2## [1] "Satir 1 ortalamasi 0.986111423178787"
## [1] "Satir 2 ortalamasi 1.66440473890558"
## [1] "Satir 3 ortalamasi 1.86445460243509"
## [1] "Satir 4 negatif sayi icermektedir."
## [1] "Satir 5 negatif sayi icermektedir."
## [1] "Satir 6 ortalamasi 2.18755744815693"
## [1] "Satir 7 ortalamasi 2.42896783600747"
## [1] "Satir 8 ortalamasi 1.11152186047931"
## [1] "Satir 9 ortalamasi 1.28348082027049"
## [1] "Satir 10 ortalamasi 1.49790135754768"
## [1] "Satir 11 ortalamasi 1.00823845594998"
## [1] "Satir 12 ortalamasi 1.84432161490249"
## [1] "Satir 13 ortalamasi 2.30730516248531"
## [1] "Satir 14 ortalamasi 1.32997520232501"
## [1] "Satir 15 ortalamasi 1.40736423997693"
## [1] "Satir 16 ortalamasi 0.930694377568197"
## [1] "Satir 17 ortalamasi 1.09683802891735"
## [1] "Satir 18 ortalamasi 1.34543057465283"
## [1] "Satir 19 ortalamasi 1.91931890408157"
## [1] "Satir 20 ortalamasi 1.46149447129439"
## [1] "Satir 21 ortalamasi 1.48698773010654"
## [1] "Satir 22 ortalamasi 2.50083591324982"
## [1] "Satir 23 ortalamasi 2.49403230671112"
## [1] "Satir 24 ortalamasi 2.03307899444367"
## [1] "Satir 25 ortalamasi 1.47358418101605"
## [1] "Satir 26 ortalamasi 1.77152589640626"
## [1] "Satir 27 ortalamasi 1.25135003349089"
## [1] "Satir 28 ortalamasi 1.33894076274636"
## [1] "Satir 29 ortalamasi 1.82874224246664"
## [1] "Satir 30 ortalamasi 1.23831471787453"
## [1] "Satir 31 ortalamasi 1.82082600141082"
## [1] "Satir 32 ortalamasi 1.12466160143214"
## [1] "Satir 33 ortalamasi 1.32597664522914"
## [1] "Satir 34 negatif sayi icermektedir."
## [1] "Satir 35 ortalamasi 2.32162456679167"
## [1] "Satir 36 ortalamasi 2.23274928866424"
## [1] "Satir 37 negatif sayi icermektedir."
## [1] "Satir 38 ortalamasi 2.275511227626"
## [1] "Satir 39 ortalamasi 1.7921160361432"
## [1] "Satir 40 ortalamasi 0.970509167208986"
## [1] "Satir 41 ortalamasi 1.24765799189581"
## [1] "Satir 42 ortalamasi 2.51234120817512"
## [1] "Satir 43 ortalamasi 2.31828043397862"
## [1] "Satir 44 negatif sayi icermektedir."
## [1] "Satir 45 ortalamasi 1.95647545685842"
## [1] "Satir 46 negatif sayi icermektedir."
## [1] "Satir 47 ortalamasi 2.36551615481398"
## [1] "Satir 48 ortalamasi 1.97786024664016"
## [1] "Satir 49 ortalamasi 1.6393028512105"
## [1] "Satir 50 ortalamasi 3.73629039983628"
## [1] "Satir 51 ortalamasi 1.82116726064836"
## [1] "Satir 52 ortalamasi 1.87732770333814"
## [1] "Satir 53 ortalamasi 2.7020031804201"
## [1] "Satir 54 ortalamasi 1.05164097984234"
## [1] "Satir 55 ortalamasi 1.88981004324099"
## [1] "Satir 56 ortalamasi 1.54248819505925"
## [1] "Satir 57 ortalamasi 1.65731581957976"
## [1] "Satir 58 ortalamasi 1.36890435340706"
## [1] "Satir 59 negatif sayi icermektedir."
## [1] "Satir 60 ortalamasi 2.22046851034413"
## [1] "Satir 61 ortalamasi 1.0408644748318"
## [1] "Satir 62 ortalamasi 1.72072095294252"
## [1] "Satir 63 ortalamasi 1.53167534425738"
## [1] "Satir 64 ortalamasi 1.72856879470484"
## [1] "Satir 65 ortalamasi 1.37607074870477"
## [1] "Satir 66 ortalamasi 1.42295571491744"
## [1] "Satir 67 ortalamasi 0.88385039568476"
## [1] "Satir 68 ortalamasi 2.35701379888311"
## [1] "Satir 69 ortalamasi 1.35179926755423"
## [1] "Satir 70 ortalamasi 1.28012686374286"
## [1] "Satir 71 negatif sayi icermektedir."
## [1] "Satir 72 ortalamasi 1.67406636870506"
## [1] "Satir 73 ortalamasi 1.37691945587952"
## [1] "Satir 74 ortalamasi 2.00099153014073"
## [1] "Satir 75 negatif sayi icermektedir."
## [1] "Satir 76 ortalamasi 1.60454610453076"
## [1] "Satir 77 ortalamasi 2.0804975152321"
## [1] "Satir 78 ortalamasi 1.67436426400702"
## [1] "Satir 79 ortalamasi 2.04712004349156"
## [1] "Satir 80 ortalamasi 1.2963699279751"
## [1] "Satir 81 ortalamasi 2.06864424004881"
## [1] "Satir 82 ortalamasi 2.18401195176334"
## [1] "Satir 83 ortalamasi 2.38233635418165"
## [1] "Satir 84 ortalamasi 1.65733160944781"
## [1] "Satir 85 ortalamasi 1.53913327407787"
## [1] "Satir 86 ortalamasi 1.5977866331596"
## [1] "Satir 87 ortalamasi 1.53640423869466"
## [1] "Satir 88 ortalamasi 1.4151688443321"
## [1] "Satir 89 ortalamasi 1.65657353958559"
## [1] "Satir 90 ortalamasi 1.09930366562984"
## [1] "Satir 91 ortalamasi 2.04289262764082"
## [1] "Satir 92 ortalamasi 1.49359077505866"
## [1] "Satir 93 ortalamasi 1.59542242961016"
## [1] "Satir 94 negatif sayi icermektedir."
## [1] "Satir 95 ortalamasi 1.63562964801907"
## [1] "Satir 96 ortalamasi 1.25826462716513"
## [1] "Satir 97 ortalamasi 3.88578289773781"
## [1] "Satir 98 ortalamasi 2.05151453891869"
## [1] "Satir 99 ortalamasi 1.96874159472044"
## [1] "Satir 100 ortalamasi 1.5918224514213"