Nesne Oluşturma

Sayısal Vektörler

(sayisal_vektor <-  c(1,2,3))
[1] 1 2 3
  • 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
  • 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
(karakter_vektor <-  c("a","b","c"))  ## cift tirnak
[1] "a" "b" "c"
(mantiksal_vektor <- c(TRUE,TRUE,FALSE))
[1]  TRUE  TRUE FALSE

Vektör İşlemleri

  • Vektör uzunluğu length() fonksiyonu ile vektör türleri ise class(), mode() ya da typeof() fonksiyonları ise tür belirlemek için kullanılmaktadır.

  • Vektörler bir veya daha fazla elemandan oluşabilmektedir.

a <- 1  # tek elemandan oluşur.
# Vektör uzunluğunu öğrenmek icin length() fonksiyonu
length(a)
[1] 1
  • 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
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
[1] 2 4 4 6 6
x <- 1:10
  • bir vektöründeki verilerin toplanması
sum(x)
[1] 55
  • bir vektöründeki verilerin çarpılması
prod(x)
[1] 3628800
  • bir vektöründeki verilerin küçükten büyüğe sıralanması
sort(x)
 [1]  1  2  3  4  5  6  7  8  9 10
  • bir vektörünün elemanların sıralarının tersine çevrilmesi
rev(x)
 [1] 10  9  8  7  6  5  4  3  2  1
  • bir vektöründeki verilerin standart sapmasının hesaplanması
sd(x)
[1] 3.02765
  • bir vektöründeki en büyük verinin gösterilmesi
max(x)
[1] 10
  • bir vektöründeki en küçük verinin gösterilmesi
min(x)
[1] 1
  • En büyük verinin vektörün kaçıncı elemanı olduğunun gösterilmesi
which.max(x)
[1] 10
  • En küçük verinin vektörün kaçıncı elemanı olduğunun gösterilmesi
which.min(x)
[1] 1

Indeksler

  • Vektörlerden eleman sırası, isim ve mantıksal operatörler olmak üzere üç farklı yolla eleman seçilebilir.
ad  <-  c("Ali","Elif","Su","Deniz","Aras",
          "Berk","Can","Ece","Efe","Arda")
  • ad vektörünün 1. elemanı
ad[1]
[1] "Ali"
  • ad vektörünün 5. elemanını yazdıracak kodu oluşturunuz.
Buraya bakmadan önce kendin denemelisin!
ad[5]
[1] "Aras"
  • ad vektörünün son elemanını yazdıracak kodu oluşturunuz.
Buraya bakmadan önce kendin denemelisin!
ad[10]
[1] "Arda"
  • ad vektörünün son elemanını yazdıracak kodu vektörün 10 elemanlı olduğunu bilmediğiniz de ne yaparsınız?
Buraya bakmadan önce kendin denemelisin!
ad[length(ad)]
[1] "Arda"
  • Vektörün sadece 1., 5. 8. elemanının yazdıracak kodu oluşturunuz.
Buraya bakmadan önce kendin denemelisin!
ad[c(1,5,8)]
[1] "Ali"  "Aras" "Ece" 
  • Vektörün sadece 1. elemanının hariç tutacak kodu oluşturunuz.
Buraya bakmadan önce kendin denemelisin!
ad[-1]
[1] "Elif"  "Su"    "Deniz" "Aras"  "Berk"  "Can"   "Ece"   "Efe"   "Arda" 
  • Vektörün 1. ve 5. elemanının hariç tutacak kodu oluşturunuz
Buraya bakmadan önce kendin denemelisin!
ad[-c(1,5)]
[1] "Elif"  "Su"    "Deniz" "Berk"  "Can"   "Ece"   "Efe"   "Arda" 
  • Vektörün son üç elemanını yazdıracak kodu oluşturunuz
Buraya bakmadan önce kendin denemelisin!
ad[(length(ad)-2):length(ad)]
[1] "Ece"  "Efe"  "Arda"

Vektöre eleman eklenmesi

Buraya bakmadan önce kendin denemelisin!
ad[11] <- "Asu"; ad
 [1] "Ali"   "Elif"  "Su"    "Deniz" "Aras"  "Berk"  "Can"   "Ece"   "Efe"  
[10] "Arda"  "Asu"  
  • vektöre birden fazla eleman eklenmesi
Buraya bakmadan önce kendin denemelisin!
ad[12:13] <- c("Ahu","Han"); ad
 [1] "Ali"   "Elif"  "Su"    "Deniz" "Aras"  "Berk"  "Can"   "Ece"   "Efe"  
[10] "Arda"  "Asu"   "Ahu"   "Han"  
  • Vektörün ortasına eleman eklenmesi append() fonksiyonu ile yapılabilir. Fonksiyon yardım sayfasını inceleyiniz.
Buraya bakmadan önce kendin denemelisin!
(ad <- append(ad, "Taha", after = 3))
 [1] "Ali"   "Elif"  "Su"    "Taha"  "Deniz" "Aras"  "Berk"  "Can"   "Ece"  
[10] "Efe"   "Arda"  "Asu"   "Ahu"   "Han"  
  • ya da c() fonksiyonu ile yapılabilir.
Buraya bakmadan önce kendin denemelisin!
ad <- c(ad[1:5],"Selim",ad[7:length(ad)]); ad
 [1] "Ali"   "Elif"  "Su"    "Taha"  "Deniz" "Selim" "Berk"  "Can"   "Ece"  
[10] "Efe"   "Arda"  "Asu"   "Ahu"   "Han"  

Alıştırma

  • 10 kişiden oluşan bir gruptaki kişilerinin boy ve kilo ölçümleri için ise aşağıdaki vektör oluşturulmuştur.
ad  <-  c("Ali","Elif","Su","Deniz","Aras",
          "Berk","Can","Ece","Efe","Arda")
boy <- c(160,165,170,155,167,162,169,158,160,164)
kilo <-c(50,55,57,50,48,65,58,62,45,47)
  • Eğer elimizdeki vektör isimlendirilmiş bir vektör ise eleman seçimini isimle de yapabiliriz.
#isimsiz boy vektoru
names(boy) # names() fonksiyonu ile isimlendirme yapılabilir.
NULL
  • ad vektörünü boy vektörü ile isimlendirirken nasıl kullanabiliriz?
names(boy) <- ad
boy
  Ali  Elif    Su Deniz  Aras  Berk   Can   Ece   Efe  Arda 
  160   165   170   155   167   162   169   158   160   164 
  • Arda’nın boyunu isimlendirilmiş vektörü kullanarak boy["Arda"] ile yazdırırsınız
boy["Arda"]
Arda 
 164 

Örüntülerle Vektör Oluşturma

  • Vektör oluşturmanın farklı yolları bulunmaktadır. En basit yolu iki nokta ":" operatörünü kullanmaktır.
rakamlar <- 0:9
rakamlar
 [1] 0 1 2 3 4 5 6 7 8 9
  • büyükten küçüğe rakamlardan vektör oluşturulması
rakamlar <- 9:0
rakamlar
 [1] 9 8 7 6 5 4 3 2 1 0

seq()

  • Belirli bir kurala göre sayı dizileri oluşturmak için ise seq(), rep() ve paste() fonksiyonlarından yararlanılabilir. İlk olarak bu fonksiyonların yardım sayfalarını inceleyelim.

  • 1’den 10’a kadar birer birer artan sayılardan dizi oluşturulacak kodu oluşturunuz.

  • Bir önceki işlemi argümansız olarak oluşturunuz.

  • Aynı çıktıyı tek bir argümanla elde edebilir misiniz?

  • length argümanını kullanarak aşağıdaki çıktıyı oluşturacak kodu oluşturunuz.

Buraya bakmadan önce kendin denemelisin!
seq(from = 1, to=3, length = 6)
[1] 1.0 1.4 1.8 2.2 2.6 3.0
  • by argümanını ile artış miktarını kullanarak aşağıdaki çıktıyı oluşturacak kodu oluşturunuz.
Buraya bakmadan önce kendin denemelisin!
seq(from=1,to=3,by=0.5)
[1] 1.0 1.5 2.0 2.5 3.0
  • Belirli bir aralıkta kaç elemanın yer alacağını length.out argümanı kullanarak aşağıdaki çıktıyı oluşturacak kodu oluşturunuz.
[1] 1.0 1.5 2.0 2.5 3.0

rep()

rep() fonksiyonu için örnekler

# üç elemanlı bir vektörün üç kere tekrar ettirilmesi
rep(c(3,4,5), 3)
[1] 3 4 5 3 4 5 3 4 5
# rakamların üç kere tekrar ettirilmesi
rep(0:9, times = 3) 
 [1] 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
  • a <- c(3,5,7) vektörünü kullanarak aşağıdaki çıktıyı elde edecek kodu hazırlayınız.
Buraya bakmadan önce kendin denemelisin!
a <- c(3,5,7)
rep(a, each = 3) 
[1] 3 3 3 5 5 5 7 7 7
  • a <- c(3,5,7) vektörünü kullanarak aşağıdaki çıktıyı elde edecek kodu hazırlayınız.
Buraya bakmadan önce kendin denemelisin!
a <- c(3,5,7)
rep(a,each=3,times=3) 
 [1] 3 3 3 5 5 5 7 7 7 3 3 3 5 5 5 7 7 7 3 3 3 5 5 5 7 7 7
  • Çıktıyı elde edecek kodu hazırlayınız.
Buraya bakmadan önce kendin denemelisin!
rep(1:4,c(2,2,2,2))
[1] 1 1 2 2 3 3 4 4
  • Çıktıyı elde edecek kodu hazırlayınız.
Buraya bakmadan önce kendin denemelisin!
rep(1:3,1:3)
[1] 1 2 2 3 3 3

paste()

  • paste()fonksiyonu çıktısı her zaman için karakterdir.
paste(1:4) # çıktısı karakterdir
[1] "1" "2" "3" "4"
class(paste(1:4))
[1] "character"
  • Çıktıyı elde edecek kodu tamamlayınız paste("test",...)
Buraya bakmadan önce kendin denemelisin!
paste("test",1:10) 
 [1] "test 1"  "test 2"  "test 3"  "test 4"  "test 5"  "test 6"  "test 7" 
 [8] "test 8"  "test 9"  "test 10"
  • Çıktıyı elde edecek kodu tamamlayınızpaste("test",1:10,"...",sep="_")
Buraya bakmadan önce kendin denemelisin!
paste("test",1:10,"puan",sep="_")
 [1] "test_1_puan"  "test_2_puan"  "test_3_puan"  "test_4_puan"  "test_5_puan" 
 [6] "test_6_puan"  "test_7_puan"  "test_8_puan"  "test_9_puan"  "test_10_puan"
  • Çıktıyı elde edecek kodu tamamlayınız paste("test",c("A","B","C","D",...))
Buraya bakmadan önce kendin denemelisin!
paste("test",c("A","B","C","D",1:4)) 
[1] "test A" "test B" "test C" "test D" "test 1" "test 2" "test 3" "test 4"

Rasgele Veri Oluşturma

  • Farklı fonksiyonlarla rastgele veri üretilebilir. Örneğin 0-100 arasında 20 farklı değer elde edilmek istenilsin. Bunu yapmak için sample(),runif() ya da rnorm() fonksiyonlarından yararlanılabilir.
sample(0:100,5)
[1]  2 11 87 98 36
runif(10,  0, 5)
 [1] 4.2830482 2.1952705 3.5143706 2.2143867 2.6302775 1.9796669 4.0590182
 [8] 0.7066806 3.4480888 4.5175810
rnorm(10,50,5)
 [1] 49.73868 51.08875 49.90501 50.56473 40.79010 52.87806 44.89653 50.20001
 [9] 48.00337 45.49998
  • Kullanılan üç fonksiyonun da yardım sayfalarını ve kullanım amaçlarını inceleyiniz.

Alıştırma

BKI vücut ağırlığınızın metre cinsinden boy uzunluğunun karesine bölünmesi ile elde edilmektedir. Her bir bireye ait BKI değerini hesaplayınız. BKI değerlerinin ortalaması kaçtır (iki ondalığa yuvarlayınız)?

ad  <-  c("Ali","Elif","Su","Deniz","Aras",
          "Berk","Can","Ece","Efe","Arda")
boy <- c(160,165,170,155,167,162,169,158,160,164)
kilo <- c(55,55,57,50,48,65,58,62,45,47)
Buraya bakmadan önce kendin denemelisin!
# BKI  hesaplanması
boy_m  <- boy/100
BKI <- kilo/( boy_m * boy_m)
round(mean(BKI),2)
[1] 20.44

Karakter Nesneler

  • karakter nesnesi oluşturulması ve nesnenin türünün sorgulanmasa
karakter <- "olcme";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.

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. Çıktının aynı olmasını istiyorsanız set.seed() fonksiyonunun 10 değeri ile kullanınız.
 [1] "1. maddenin guclugu: 0.51"  "2. maddenin guclugu: 0.31" 
 [3] "3. maddenin guclugu: 0.43"  "4. maddenin guclugu: 0.69" 
 [5] "5. maddenin guclugu: 0.09"  "6. maddenin guclugu: 0.23" 
 [7] "7. maddenin guclugu: 0.27"  "8. maddenin guclugu: 0.27" 
 [9] "9. maddenin guclugu: 0.62"  "10. maddenin guclugu: 0.43"

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) kodu ile aşağıdaki çıktıyı oluşturacak kodu yazınız
Buraya bakmadan önce kendin denemelisin!
substring("YILMAZ", 1:6 , 1:6)
[1] "Y" "I" "L" "M" "A" "Z"
  • substring("YILMAZ", ... , 4:6) kodu ile aşağıdaki çıktıyı oluşturacak kodu yazınız
Buraya bakmadan önce kendin denemelisin!
substring("YILMAZ", 2 , 4:6)
[1] "ILM"   "ILMA"  "ILMAZ"
  • Karakter nesnelerde daha fazlası için aşağıdaki fonksiyonları inceleyebilirsiniz.

  • strsplit()

  • noquote()

  • cat()

  • grep()

  • duplicated()

  • agrep()

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")
[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

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"
is.numeric(x)
[1] TRUE
is.logical(x)
[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"
is.integer(y)
[1] TRUE
is.double(y)
[1] FALSE

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" 

Kendinizi Test Edin

S1. Aşağıdaki tabloda yer alan üç sütun için birer vektör oluşturunuz. Öğrencilerin geçme notu her iki sınavın ortalaması olarak hesaplanacaktır. Bu öğrencilerin geçme notlarını hesaplayınız. Geçme notlarının betimsel istatistiklerini hesaplayınız.

Öğrenci Vize Final
Ogrenci1 50 45
Ogrenci2 55 65
Ogrenci3 60 85
Ogrenci4 70 90
Ogrenci5 80 85
Geçme notlarının minumum değeri:

Geçme notlarının ortalama değeri:

Geçme notlarının maksimum değeri:

S2. Birden n’e kadar olan sayların toplamını hesaplayan fonksiyon yazımı toplam() tek argümanlı fonksiyon oluşturunuz. Argüman değeri 5 olduğunda 1+2+3+4+5=15 değerini versin.

  • birden n’e kadar olan sayların toplamı: (n*(n+1))/2

S3. 1’den n’ e kadar olan sayıların toplamını hesaplayan fonksiyonu argümansız olarak aşağıdaki şekilde yazmayı deneyiniz. Fonksiyonu çalıştırdığınızda ekranda/konsolda kaça kadar olan sayların toplamı hesaplansın: yazsın, kullanıcının girdiği değere göre aşağıda çıktısı çıksın.

toplam()

kaça kadar olan sayların toplamı hesaplansın: 10

[1 " 10 'e kadar olan sayların toplamı: 55

ODEV

  • Kitap Bölüm 2 1. Soruyu tamamlayınız.

  • swirl package - learn R in R (Programming ilk 9 modul) bitimediyseniz tamamlayınız

  • datacamp ödevinizi yapmayını unutmayın 😄