R Günlüğüm

Hedefler - Beklentiler

Dönem sonunda araştırmalarımda kullanacağım analizleri r studio üzerinde yapabilmeyi hedefliyorum. Aslında bu benim dersi seçmedeki temel motivasyonumdu. Fakat benim için sürece yeni motivasyon kaynakları eklendi (markdown, shiny). Artık bu derse sadece analiz gözüyle bakamıyorum. Doktora çalışmam için planladığım uygulamayı tamamen r üzerinde geliştirebileceğimi fark ettim. Ne kadar derinleşebileceğimi bilmiyorum fakat bu süreç çok keyifli.

Aşağıda sırasıyla her hafta dersler kapsamında yaptığım çalışmalar yer ve günün sorularına cevaplar yer alıyor.

1. Hafta

Dersin ilk haftasında atama operatörü <- kullanmayı ve temel aritmetik işlemleri yapmayı öğrendim. Aşağıda bazı aritmetik işlemlere örnekler yer alıyor.

# Yazılan kod parantez içine alındığında doğrudan işlem sonucu yazdırılır.

(a.1 <- 8+12)
## [1] 20
(b.1 <- 8^2)
## [1] 64
(c.1 <- (5+5)/2)
## [1] 5
(d.1 <- sqrt(36))
## [1] 6

2. Hafta

Dersin ikinci haftasında fonksiyonlar ve çalışma alanına ilişkin temel bilgileri öğrendim. Vektörler ve vektörler ile yapılabilecek işlemler de haftanın içerikleri arasındaydı. Çalışma alanındaki nesneleri ls() fonksiyonu ile görüntüleme ya da rm() fonksiyonu ile çalışma alanındaki nesneleri silme bunlardan bazırları. Ayrıca function ()kullanarak basit fonksiyonlar da yazabiliyorum. Aşağıda bazı örnekler yer alıyor.

# Girilen sayının karesini alan bir fonksiyon yazalım.

kare_al <- function(x) {x * x}
kare_al (2)
## [1] 4
# Girilen değerin karesini ya da farklı bir kuvvetini almak için aşağıdaki fonksiyon kullanılabilir.

us_al <- function(x, us=2) {
  x^us
}

us_al (3)
## [1] 9
#Fonksiyonu oluştururken "us" değerini 2 olarak sabitlediğimiz için burada girilen sayının karesini alacaktır. Bu değeri aşağıdaki gibi değiştirebiliriz.

us_al(2, 3)
## [1] 8

Base paket içerisinde yer alan letters ve LETTERS vektörlerini kullanarak Türkçe alfabe oluşturabiliriz. Bunun için aşağıdaki fonksiyon kullanılabilir.

alfabe_olustur <- function() {
  alfabe <- letters
  alfabe<-append (alfabe, "ç", 3)
  alfabe<- append (alfabe, "ı", 9)
  alfabe<- append (alfabe, "ğ", 8)
  alfabe<- append (alfabe, "ö", 18)
  alfabe<- append (alfabe, "ş", 23)
  alfabe<- append (alfabe, "ü", 26) #Bu satıra kadar Türkçe karakterleri tek tek ekledik.
  alfabe <- alfabe [-c(21, 29, 30)] #Burada ise Türkçe olmayan karakterleri çıkardık.
  paste(1:29, alfabe, sep = ":")
}
alfabe_olustur()
##  [1] "1:a"  "2:b"  "3:c"  "4:ç"  "5:d"  "6:e"  "7:f"  "8:g"  "9:ğ"  "10:h"
## [11] "11:ı" "12:i" "13:j" "14:k" "15:l" "16:m" "17:n" "18:o" "19:ö" "20:p"
## [21] "21:r" "22:s" "23:ş" "24:t" "25:u" "26:ü" "27:v" "28:y" "29:z"

Çalışma alanında girilen harfi içeren ve girilen harfle başlayan nesneleri listeyecek bir fonksiyon aşağıdaki şekilde yazılabilir.

tara <- function(harf1="a", harf2="n") {
  a<-list(ls(pattern = harf1, envir = .GlobalEnv))
  b<-list(ls(pattern = paste("^", harf2, sep = ""), envir = .GlobalEnv))
  
  yazi1<-"Çalışma alanında girdiğin harfi içeren nesneler:"
  yazi2<-"Çalışma alanında girdiğin harfle başlayan nesneler:"
  
  paste(yazi1, a, yazi2, b)
}

tara("n", "a")
## [1] "Çalışma alanında girdiğin harfi içeren nesneler: character(0) Çalışma alanında girdiğin harfle başlayan nesneler: c(\"a.1\", \"alfabe_olustur\")"
#Fonksiyon içerisinde ilk sıraya yazılan harfi içeren nesneler ve ikinci sıraya yazılan harfle başlayan nesneler listelenmektedir.

3. Hafta

Üçüncü hafta vektörler üzerinde çalışmaya devam ettik. runif() seq() rep() gibi bazı önemli fonksiyonlar haftanın kazanımlarından oldu. Aşağıda vektörleri bölmeye ilişkin bir ödevin cevabı yer alıyor.

# Aşağıdaki vektörü isim ve soyisim olarak iki ayrı vektöre bölme

ad_soyad<- c("Ayse-Sel","Can-Yucel","Cem-Togay","Banu-Cift")
yeni <- strsplit(ad_soyad, "-")
yeni <- unlist (yeni)
ad<-yeni[c(1,3,5,7)]
soyad<-yeni[c(2,4,6,8)]
ad
## [1] "Ayse" "Can"  "Cem"  "Banu"
soyad
## [1] "Sel"   "Yucel" "Togay" "Cift"

Haftanın bonus sorularından olan bir fonksiyon ödevi aşağıda yer alıyor.

#Fonksiyon çalıştırıldığında kullanıcının kaça kadar olan sayıların toplanması istediği soruluyor. Kullanıcının cevabı doğrultusunda işlem yapılıyor.

toplam <- function() {
  b<-readline(prompt = "Kaça kadar olan sayıları toplamak istersin?")
c<- as.numeric(b)
 paste("Cevap", ((c*(c+1))/2), sep = ":")
}

toplam()
## Kaça kadar olan sayıları toplamak istersin?
## [1] "Cevap:NA"

4. Hafta

Haftanın benim için en önemli kazanımı markdown oldu. Fırsat buldukça bu paketle çalışmalar yapmaya devam edeceğim.

Haftanın temel konusu matrislerdi. Vektörlerle kullanılabilen [] gibi operatörler matrislerle de kullanılabiliyor. Bunun yanında matrix() rbind() cbind() dim() dimnames()fonksiyonları konu için önemli fonksiyonlar.

Aşağıda haftanın ödevi olan fonksiyon yer alıyor.

#Girilen iki değerin toplamını, farkını, çarpımını ve bölümünü veren fonksiyon aşağıdaki gibi yazılabilir.

islem <- function (x=0,y=0) {
  c((x+y), (x-y), (x*y), (x/y))
}

islem (1,3)
## [1]  4.0000000 -2.0000000  3.0000000  0.3333333
islem (2,4)
## [1]  6.0 -2.0  8.0  0.5
islem ()
## [1]   0   0   0 NaN

5. Hafta

Maalesef derse katılamadım. Fakat data.frame üzerinde durulmuş. Sunumlardan konuyu çalıştım. Aşağıda günün sorularının cevapları yer alıyor.

#Birinci sorunun cevabı

TamSayi <- as.integer(NULL)
OndalikSayi <- as.numeric(NULL)
Karakter <- as.character(NULL)
Mantiksal <- as.logical(NULL)
Faktor <- as.factor(NULL)

yeni.data <- data.frame(TamSayi, OndalikSayi, Karakter, Mantiksal, Faktor)

sorgula <- function() {
  print("Bos data.framenin yapısı:")
  str(yeni.data)
}

sorgula()
## [1] "Bos data.framenin yapısı:"
## 'data.frame':    0 obs. of  5 variables:
##  $ TamSayi    : int 
##  $ OndalikSayi: num 
##  $ Karakter   : chr 
##  $ Mantiksal  : logi 
##  $ Faktor     : Factor w/ 0 levels:

İkinci sorunun çözümünde önceki haftalarda öğrendiğim readline() fonksiyonunu da kullandım.

ad = c('Su', 'Pera', 'Sule', 'Can', 'Cem', 'Name', 'Aras', 'Mete', 'Kaan', 'Pelin')
puan = c(12.5, 9, 16.5, 12, 9, 20, 14.5, 13.5, 8, 19)
deneme = c(1, NA, 2, NA, 2, NA, 1, NA, 2, 1)
bonus = c(1,0,1, 0, 0, 1, 1, 0,0, 1)

yeni.df <- data.frame(ad, puan, deneme, bonus)


Hesapla <- function() {
  X<- readline(prompt = "evet yazarsan senin için deneme sütunundaki NA verileri hesaplarım:")
  Y<- sum(as.numeric(is.na(yeni.df$deneme)))
  if (X=="evet") {
    paste("Deneme sütundaki NA sayısı",Y, sep = ":")
  }
  else {
    print("Sen bilirsin!")}
}

Hesapla()
## evet yazarsan senin için deneme sütunundaki NA verileri hesaplarım:
## [1] "Sen bilirsin!"

R Fonksiyonlar - Günün Soruları

##1. Soru Çözümü##

ogrenci <- c("ARIF ARSLAN","ASLI YORUK","ATA CANTURK DOGRUL",
             "AYBUKE DOGAC","AYSE TUNA","BURCAK GONUL AYDIN",
             "CAGATAY COSKUN","EMRE GONEN","FEYZI GUNES",
             "FURKAN ATMACA", "HARUN DILEK","KORKUT KOCAK",
             "MEHMET YILMAZ","RAMAZAN SOYUK",
             "SEMIH TOPUZ","SINEM COSKUN")

not <- sample(0:100, 16)

notlar <- data.frame(Ad_Soyad = ogrenci, Not = not)

is.data.frame(notlar)
## [1] TRUE
grup <- function(x, n=4, w=x$Not) {
  if (is.data.frame(x)==TRUE & ncol(x)<=2) {
    sample_n(x, n, weight=w)
  }
  else {
    print("Lütfen fonksiyona en fazla iki sütundan oluşan bir veri seti giriniz!")
  }
}

grup(notlar)
##             Ad_Soyad Not
## 1         ASLI YORUK  56
## 2        HARUN DILEK  97
## 3 ATA CANTURK DOGRUL  27
## 4       AYBUKE DOGAC  34
##2. soru çözümü##

x <- 1:100

geo_ort <- function(x) {
  if(is.vector(x)== T & is.numeric(x)==T) {
    mean(log(x))
  }
  
  else {
    print("Lütfen fonksiyona sayısal verilerden oluşan bir vektör giriniz!")
  }
}

geo_ort(x)
## [1] 3.637394
geo_ort(c("ali", "veli"))
## [1] "Lütfen fonksiyona sayısal verilerden oluşan bir vektör giriniz!"

Mantıksal Operatörler Ödev

vize <- c(60,70,80,90,55)
final <- c(45,65,70,50,80)
devam <- c(14,10,13,12,11)

ifelse(final>50 & devam>11, ((final*60/100)+(vize*40/100)), (final*60/100))
## [1] 27 39 74 30 48