Bu dökümandaki alıştırmalar ilgili temel R eğitim dökümanı tamamlandıktan sonra yapılabilir. Kodunuzun çıktısı sorularda verilen çıktı ile benzer olmalıdır. Bazı komutların önünde set.seed()
fonksiyonu bulunmaktadır. Rastgelelik içeren işlemlerde herkesin aynı sonucu bulabilmesi için kullanılmaktadır.
Varsayalım ki bugünkü Dolar/TL kuru 3.70. Önümüzdeki 60 günün dolar tahminini aşağıdaki formül ile hesaplıyoruz.
#Aşağıdaki iki satırı kopyala yapıştır ile
set.seed(135)
dolar<-round(3.7*exp(cumsum((0.02-0.5*(0.2^2))/252 + 0.2*rnorm(60)*sqrt(1/252))),4)
#İlk 10 gün ile kendi verilerinizi kontrol edin.
print(dolar[1:10])
## [1] 3.6793 3.6578 3.6530 3.7184 3.6572 3.6685 3.7246 3.7040 3.7238 3.7693
Dolar tahmin verisiyle aşağıdaki bilgileri hesaplayın.
## Bazı soruların çözümleri. Diğerleri soruların yanında.
##5
# Önce doların herhangi bir günde düşüş gösterip görmediğini hesaplayalım.
dusus_tf <- c(3.7,dolar[-length(dolar)]) > dolar
# Sonra TRUEları toplayıp gün sayısını bulalım.
dusus_gun_sayisi<-sum(dusus_tf)
##7
dusus_gun<-0
arka_arkaya<-0
son_dusus <- 0
for(i in 1:length(dolar)){
if(dusus_tf[i]){
dusus_gun<-dusus_gun+1
if(dusus_gun > arka_arkaya){
arka_arkaya <- dusus_gun
son_dusus<-i
}
}else{
dusus_gun<-0
}
}
## 8
degisim_gunler<-which(abs(c(3.7,dolar[-length(dolar)]) - dolar)>=0.06)
## 9
yuzdesel_degisim <- dolar/c(3.7,dolar[-length(dolar)])
firsat_gunu <- which.max(yuzdesel_degisim) - 1
yuzdesel_kar <- round(max(yuzdesel_degisim)-1,3)*100
##10
sermaye <- 100
for(i in 1:length(dolar)){
if(yuzdesel_degisim[i] > 1){
sermaye <- sermaye*yuzdesel_degisim[i]
}
}
net_kar <- sermaye - 100
#10 vektörel alternatif
sermaye <- 100
net_kar <- round(sermaye*prod(yuzdesel_degisim[yuzdesel_degisim>1]) - 100,2)
1’den 15’e kadar bir döngü içerisinde eğer değer 3 ile tam bölünebiliyorsa “Akademik”, 5 ile tam bölünebiliyorsa “Bilişim”, 15 ile tam bölünebiliyorsa “Akademik Bilişim” yazdırın (Not: 15’te ayrıca Akademik veya Bilişim yazılmamalı.). (İpucu: Bölünebilirliği modüler aritmetik operatörü %%
ile yapabilirsiniz. Örneğin 4%%3
1 değerini verirken 4%%2
0 değerini verir..)
for(i in 1:15){
print(i)
#15 ile tam bölünüyor mu kontrol et.
if(i%%15==0){
print("Akademik Bilişim")
#Bölünmüyorsa 5 ile tam bölünüyor mu kontrol et.
}else if(i%%5 == 0){
print("Bilişim")
#Bölünmüyorsa 3 ile tam bölünüyor mu kontrol et.
}else if(i%%3 == 0){
print("Akademik")
}
}
## [1] 1
## [1] 2
## [1] 3
## [1] "Akademik"
## [1] 4
## [1] 5
## [1] "Bilişim"
## [1] 6
## [1] "Akademik"
## [1] 7
## [1] 8
## [1] 9
## [1] "Akademik"
## [1] 10
## [1] "Bilişim"
## [1] 11
## [1] 12
## [1] "Akademik"
## [1] 13
## [1] 14
## [1] 15
## [1] "Akademik Bilişim"
(İsteğe bağlı ek alıştırma) Bunu bir döngü olmadan yapmaya çalışın.
cikti<-rep("",15)
cikti[(1:15)%%3 == 0] <- "Akademik"
cikti[(1:15)%%5 == 0] <- "Bilişim"
cikti[(1:15)%%15 == 0] <- "Akademik Bilişim"
names(cikti)<-1:15
print(cikti)
## 1 2 3
## "" "" "Akademik"
## 4 5 6
## "" "Bilişim" "Akademik"
## 7 8 9
## "" "" "Akademik"
## 10 11 12
## "Bilişim" "" "Akademik"
## 13 14 15
## "" "" "Akademik Bilişim"
Aşağıdaki veri seti 10 şehrin birbirinden olan uzaklıklarını belirtmektedir.
#Uzaklik matrisini almak için aşağıdaki dört satırı kopyalayıp yapıştırın.
set.seed(2017)
uzaklik_matrisi<-matrix(sample(10:50,100,replace=TRUE),ncol=10)
uzaklik_matrisi[lower.tri(uzaklik_matrisi)]<-0
uzaklik_matrisi <- uzaklik_matrisi + t(uzaklik_matrisi)
diag(uzaklik_matrisi)<-0
uzaklik_matrisi
## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
## [1,] 0 37 35 46 32 31 20 50 15 45
## [2,] 37 0 25 10 34 46 25 38 45 36
## [3,] 35 25 0 22 18 24 34 16 30 31
## [4,] 46 10 22 0 13 36 40 46 47 32
## [5,] 32 34 18 13 0 40 39 49 19 44
## [6,] 31 46 24 36 40 0 29 25 17 15
## [7,] 20 25 34 40 39 29 0 26 16 43
## [8,] 50 38 16 46 49 25 26 0 16 18
## [9,] 15 45 30 47 19 17 16 16 0 46
## [10,] 45 36 31 32 44 15 43 18 46 0
Bu şehirlerde gezen bir satış görevlisi düşünün. Verilen herhangi bir rota için satıcının gideceği toplam mesafeyi bulan bir fonksiyon yazınız. Bu fonksiyon uzaklık matrisini de girdi olarak alsın.
toplam_mesafe_hesapla<-function(uzaklik_verisi,rota_bilgisi){
toplam_mesafe<-0
for(i in 1:(length(rota_bilgisi)-1)){
toplam_mesafe <- toplam_mesafe + uzaklik_verisi[rota_bilgisi[i],rota_bilgisi[i+1]]
}
return(paste0("Toplam mesafe: ",toplam_mesafe))
}
Şehir rotası 1-5-2-6-7-2-4-1 olan bir satışçının toplam aldığı mesafeyi hesaplayın.
toplam_mesafe_hesapla(uzaklik_verisi=uzaklik_matrisi,rota_bilgisi=c(1,5,2,6,7,2,4,1))
## [1] "Toplam mesafe: 222"
Bilgisayara 1 ile 100 arasında rastgele bir sayı tutturun ve kullanıcının bu sayıyı tahmin etmesini sağlayın. Her tahminde kullanıcının tahmininin bilgisayarın tuttuğu sayıdan düşük veya yüksekse bunu belirtin. Kullanıcı 10 tahminde sonucu alamıyorsa oyunu bitirin.
#Yazılması gereken kod
sayi_tahmin <-function(){
tutulan_sayi<-sample(1:100,1)
print("Bir sayı tuttum. Bakalım bilebilecek misin? 10 tahmin hakkın var.")
for(i in 10:1){
tahmin<-readline("1 ile 100 arasında bir sayı girin: ")
if(tahmin == tutulan_sayi){
return("Tebrikler doğru cevabı buldun!")
}else if(tahmin > tutulan_sayi){
print("Tuttuğum sayı tahmininden düşük.")
}else{
print("Tuttuğum sayı tahmininden yüksek.")
}
print(paste0("Kalan tahmin hakkın: ", i-1))
}
return("Oyun bitti :/")
}
## [1] "Bir sayı tuttum. Bakalım bilebilecek misin? 10 tahmin hakkın var."
## [1] "1 ile 100 arasında bir sayı girin: 54"
## [1] "Tuttuğum sayı tahmininden yüksek."
## [1] "Alt 55"
## [1] "Kalan tahmin hakkın: 9"
## [1] "1 ile 100 arasında bir sayı girin: 76"
## [1] "Tuttuğum sayı tahmininden yüksek."
## [1] "Alt 77"
## [1] "Kalan tahmin hakkın: 8"
## [1] "1 ile 100 arasında bir sayı girin: 83"
## [1] "Tuttuğum sayı tahmininden yüksek."
## [1] "Alt 84"
## [1] "Kalan tahmin hakkın: 7"
## [1] "1 ile 100 arasında bir sayı girin: 97"
## [1] "Tuttuğum sayı tahmininden düşük."
## [1] "Üst 96"
## [1] "Kalan tahmin hakkın: 6"
## [1] "1 ile 100 arasında bir sayı girin: 94"
## [1] "Tuttuğum sayı tahmininden düşük."
## [1] "Üst 93"
## [1] "Kalan tahmin hakkın: 5"
## [1] "1 ile 100 arasında bir sayı girin: 84"
## [1] "Tuttuğum sayı tahmininden yüksek."
## [1] "Alt 85"
## [1] "Kalan tahmin hakkın: 4"
## [1] "1 ile 100 arasında bir sayı girin: 88"
## [1] "Tuttuğum sayı tahmininden yüksek."
## [1] "Alt 89"
## [1] "Kalan tahmin hakkın: 3"
## [1] "1 ile 100 arasında bir sayı girin: 91"
## [1] "Tuttuğum sayı tahmininden yüksek."
## [1] "Alt 92"
## [1] "Kalan tahmin hakkın: 2"
## [1] "1 ile 100 arasında bir sayı girin: 92"
## [1] "Tuttuğum sayı tahmininden yüksek."
## [1] "Alt 93"
## [1] "Kalan tahmin hakkın: 1"
## [1] "1 ile 100 arasında bir sayı girin: 63"
## [1] "Tuttuğum sayı tahmininden yüksek."
## [1] "Alt 64"
## [1] "Kalan tahmin hakkın: 0"
## [1] "Oyun bitti :/"