5 R Nesneler

  • Örnek bir veri seti
library(tidyverse)
data(diamonds)
head(diamonds)
carat cut color clarity depth table price x y z
0.23 Ideal E SI2 61.5 55 326 3.95 3.98 2.43
0.21 Premium E SI1 59.8 61 326 3.89 3.84 2.31
0.23 Good E VS1 56.9 65 327 4.05 4.07 2.31
0.29 Premium I VS2 62.4 58 334 4.20 4.23 2.63
0.31 Good J SI2 63.3 58 335 4.34 4.35 2.75
0.24 Very Good J VVS2 62.8 57 336 3.94 3.96 2.48

R nesne (object) yönelimli bir programlama dilidir.

  • Karakter (character)
  • Sayısal (numeric)
    • tam sayı (integer)
    • ondalıklı sayı (double)
    • karmaşık sayı (complex)
  • Mantıksal (logical)
  • Faktör (factor)
  • Liste (list)
  • Fonksiyon (function)

5.1 tam sayi

  • tamsayı nesnesi oluşturulması
tamsayi <- 2L
  • tamsayi nesnesinin türünün sorgulanması
typeof(tamsayi)
## [1] "integer"
  • tamsayı nesnesinin yazdırılması
tamsayi
## [1] 2

5.2 ondalık sayı

  • ondaliksayi nesnesinin oluşturulması
ondaliksayi <- 2.5
  • ondaliksayi nesnesinin türünün sorgulanması
typeof(ondaliksayi)
## [1] "double"
  • ondaliksayi nesnesinin yazdırılması
ondaliksayi
## [1] 2.5

5.3 İşlemler

  • tek elemanlı vektörler
x <- 1
y <- 1
x+y
## [1] 2
  • çok elemanlı vektörler
x <- c(3,4,5)
y <- c(1,2,3)
# vektör eleman sayıları aynı mı?
length(x)==length(y)
## [1] TRUE
x+y
## [1] 4 6 8
x-y
## [1] 2 2 2
  • çok elemanlı vektörler
x <- 1:9
y <- c(1,2,3)
# vektör eleman sayıları farklı mı?
length(x)/length(y)
## [1] 3
x+y
## [1]  2  4  6  5  7  9  8 10 12
x/y
## [1] 1.0 1.0 1.0 4.0 2.5 2.0 7.0 4.0 3.0
  • çok elemanlı vektörler
x <- 1:5
y <- c(1,2)
# vektör eleman sayıları farklı olduğunda
length(x)/length(y)
## [1] 2.5
  • x+y işleminin sonucu nedir?
x + y
## Warning in x + y: longer object length is not a multiple of shorter object
## length
## [1] 2 4 4 6 6

5.4 Karakter Nesneler

  • karakter nesnesi oluşturulması
karakter <- "olcme"
  • Oluşturulan nesnenin türünün sorgulanmasa
typeof(karakter)
## [1] "character"
  • nesne yazdırılması
karakter
## [1] "olcme"
# karakter nesnesi oluşturulması
ad <- "Su"
soyad <- "Sevim"
  • iki nesneyi arada boşluk bırakarak birleştirir.
paste(ad,soyad)
## [1] "Su Sevim"
  • sep argümanı farklı şekillerde özelleştirilebilir.
paste(ad,soyad, sep="")
## [1] "SuSevim"
paste(ad,soyad,sep="_")
## [1] "Su_Sevim"
  • base pakette yer alan bazı karakter vektörler bulunmaktadır.
letters
##  [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s"
## [20] "t" "u" "v" "w" "x" "y" "z"
LETTERS
##  [1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N" "O" "P" "Q" "R" "S"
## [20] "T" "U" "V" "W" "X" "Y" "Z"
month.name
##  [1] "January"   "February"  "March"     "April"     "May"       "June"     
##  [7] "July"      "August"    "September" "October"   "November"  "December"
month.abb
##  [1] "Jan" "Feb" "Mar" "Apr" "May" "Jun" "Jul" "Aug" "Sep" "Oct" "Nov" "Dec"
  • Nesne birleştirme fonksiyonlarından en sık kullananı paste()
  • paste() fonksiyonunun temel argümanları ise sep ve collapse'dir.
harf5<- letters[1:5]
(harf51 <- paste(harf5,1:5,sep="_"))
## [1] "a_1" "b_2" "c_3" "d_4" "e_5"
length(harf51)
## [1] 5
(harf52 <- paste(harf5,1:5,sep="_",
                 collapse=" "))
## [1] "a_1 b_2 c_3 d_4 e_5"
length(harf52)
## [1] 1
  • paste() fonksiyonun yardım sayfasını inceleyiniz.

5.4.1 Günün Sorusu

  • Aşağıdaki çıktıyı oluşturacak olan kodu oluşturunuz. Madde güçlük değerlerini runif() fonksiyonu ile oluşturabilirsiniz.
##  [1] "1. maddenin guclugu: 0.86"  "2. maddenin guclugu: 0.59" 
##  [3] "3. maddenin guclugu: 0.95"  "4. maddenin guclugu: 0.54" 
##  [5] "5. maddenin guclugu: 0.89"  "6. maddenin guclugu: 0.17" 
##  [7] "7. maddenin guclugu: 0"     "8. maddenin guclugu: 0.13" 
##  [9] "9. maddenin guclugu: 0.64"  "10. maddenin guclugu: 0.96"

Bunun birden fazla yolu olabilir, farklı şekillerde yapabilirsiniz.

Büyük Küçük Harf Düzenleme Fonksiyonları toupper() ve tolower()

toupper(harf5)
## [1] "A" "B" "C" "D" "E"
tolower(harf5)
## [1] "a" "b" "c" "d" "e"

casefold() fonksiyonu da upper argümanı ile birlikte kullanılabilir.

casefold(harf5, upper = FALSE)
## [1] "a" "b" "c" "d" "e"
casefold(harf5, upper = TRUE)
## [1] "A" "B" "C" "D" "E"
  • Karakter nesnelerin kaç harften oluştuğu nchar() fonksiyonu ile belirlenebilir.
nchar(month.name)
##  [1] 7 8 5 5 3 4 4 6 9 7 8 8
  • Karakter nesneleri belli bir yerden bölmek icin substr() ve substring() fonksiyonları kullanılabilir.
substr("YILMAZ", 1,3)
## [1] "YIL"
  • substring("YILMAZ", 1:.. , 1:6) kodunda "Y" "I" "L" "M" "A" "Z" çıktısı oluşturacak kodu yazınız

  • `substring("YILMAZ", ... , 4:6) kodunda "ILM" "ILMA" "ILMAZ"` çıktınısı oluşturacak kodu yazınız

  • Karakter nesnelerde daha fazlası için aşağıdaki fonksiyonları inceleyebilirsiniz.

  • strsplit()

  • noquote()

  • cat()

  • grep()

  • duplicated()

  • agrep()

5.5 Mantıksal Nesneler

mantiksal1 <-TRUE
typeof(mantiksal1)
## [1] "logical"
mantiksal1
## [1] TRUE

Mantıksal operatörler programlamanın temeli ve vazgeçilmezidir.

# eşitlik sınaması
T==TRUE
## [1] TRUE
  • 4==5 kodunun sonucu nedir?

  • 4<5 kodunun sonucu nedir?

  • 10>100 kodunun sonucu nedir?

  • Mantıksal operatörlerle yapılan sınamalar ile mantıksal nesneler oluşturulur.

sonuc <- 4<5
typeof(sonuc)
## [1] "logical"
  • Nesne türleri arasındaki değişim uygunluk durumuna göre as.*()fonksiyonları ile sağlanır.
# Karakter veri numerik veriye
as.numeric("3.14")
## [1] 3.14
# ondalık verin tam sayıya
as.integer(pi)
## [1] 3
# karakter veri numerik veriye (NA)
as.numeric("olcme")
## Warning: NAs introduced by coercion
## [1] NA
# mantıksal veri karakter veriye (NA)
as.character(TRUE)
## [1] "TRUE"
# numerik veri karakter veriye
as.character(10)
## [1] "10"
# mantıksal veri numerik veriye
as.numeric(TRUE)
## [1] 1

5.6 Nesne Türleri Sorgulama

  • Nesne türleri sorgulamak için ise class() ya da mode() fonksiyonları kullanabilir. Ancak bir nesne türüne ait olup olmadığını sorgulamak için ise is.*() fonksiyonları kullanılır.
x<- 3.14; class(x)
## [1] "numeric"
## [1] TRUE
## [1] FALSE
  • Sayısal nesnelerin türü için typeof() fonksiyonu da kullanılabilir.
y <- 2L; typeof(y); class(y) # satir içi kod ayırma
## [1] "integer"
## [1] "integer"
## [1] TRUE
## [1] FALSE

5.6.1 Günün Sorusu

  • aşağıda yer alan ad_soyad nesnesini kullanarak
ad_soyad<- c("Ayse-Sel","Can-Yucel","Cem-Togay","Banu-Cift")

aşağıdaki çıktıyı oluşturmaya çalısınız.

## [1] "Ayse" "Can"  "Cem"  "Banu"
## [1] "Sel"   "Yucel" "Togay" "Cift"