R Project

Yazan : Şadi Evren ŞEKER

R project (projesi), daha önceden vâr olan S Lang isimli, ücretli, istatistik diline alternatif olarak ücretsiz olarak çıkarılmıştır.

Bu yazının amacı R Project isimli bu istatistiksel modelleme ve geliştirme aracını tanıtan Türkçe bir yazı yayınlamaktır. Bu yazı kapsamında, R Project 2.11.1 sürümü kullanılacaktır. R Project programını, r-project.org sitesinden indirebilirsiniz.

Giriş

R project programını ilk kez çalıştırdığınızda, aşağıdaki gibi bir ekran ile karşılaşırsınız:

Yukarıdaki ekranda görülen pencere, bizim komutları verdiğimiz ana penceremiz olacak. Bu pencerede R Project içerisinde daha önceden tanımlı olan fonksiyonları kullanabileceğimiz gibi yeni fonksiyon tanımlamaları da yapabiliriz.

Basit işlemler ile programı kullanmayı öğrenelim. En basit ve en önemli ilk komutumuz, programdan nasıl çıkılacağı. Bunun için yukarıdaki resimde görülen ekranda “q()” yazmanız yeterlidir. Elbette R Project, mevcut çalışmaların kaybolmaması için, kaydetmek isteyip istemediğimizi soracaktır.

Sırada ikinci en önemli komutumuz olan “help()” komutu var. Bu komut adı üzerinde R Project’in yardım dosyalarını görüntüler ve herhangi bir komut hakkında bilgi almamıza yarar. Örneğin yeni öğrendiğimiz “q()” komutu hakkında bilgi almak isteyelim. Bu durumda

>help(q)

Yazmamız yeterlidir. Şayet kurulum sırasında, yardım dokümanlarını yüklemeyi seçtiyseniz bilgisayarınızdaki kurulu olan yardım dosyalarından q fonksiyonu hakkında bilgiler bulunarak size internet görüntüleyicinizde gösterilecektir. Şayet bu yardım dosyalarını yüklemediyseniz, internet üzerinden R Project sitesine bağlanılarak yardım dosyaları gösterilecektir.

Alternatif olarak yardım için ? işareti de kullanılabilir. Örneğin q fonksiyonu hakkında yardım almak için help(q) yazmak yerine ?q da yazılabilir. Bu iki kullanım birbirinin aynıdır.

Bazı durumlarda, kullanılmak istenen komut hatırlanamayabilir. Şayet kullanmak istediğiniz komutun bir kısmını hatırlıyorsanız, yardım dosyalarında bu komuta benzeyen bütün komutları ?? işareti ile aratabilirsiniz. Örneğin ??q şeklinde bir komut verirsek, yardım dosyalarında, içinde ne kadar q harfi geçen komut varsa hepsini listeler.

Basit Vektörler

R Project’e giriş yaptıktan sonra vektörler, diziler ve basit işlemleri öğrenebiliriz.

R project için en önemli komutlardan birisi c() komutudur. Bu komut, concatinate (üleştirmek) kelimesinden gelir ve verilen bilgileri üleştirerek bir vektör oluşturur.

Örneğin aşağıdaki ekran görüntüsünü incleyelim:

Ekran görüntüsünde ilk satırda, sadi ismindeki bir değişkene, c fonksiyonu ile bir vektör ataması yapılıyor. Bu değişken ismi daha önceden tanımlı değildir ve ilk defa burada kullanılıyor, otomatik olarak bu isimde bir vektör oluşup, daha sonraki işlemler için hafızada (RAM) saklanıyor.

Nitekim ikinci satırda bu değişkenin ismi tek başına yazıldığında, değişkenin içerisindeki vektör (mavi renkle) görüntüleniyor.

Burada atama işlemi (assignment) yapılmıştır ve c() fonksiyonunda oluşturulan vektör, “sadi” isimli değişkene atanmıştır. Bu atma işlemi için <- sembolleri kullanılmıştır (küçüktüt ve eksi)

Aynı atama işlemi assign() fonksiyonu kullanılarak da yapılabilir. Yalnız assign kullanılırsa, değişkenin ismi çift tırnak içinde yazılmalıdır. Benzer şekilde okun yönü -> sağa doğru (eksi ve büyüktür) şeklinde kullanılırsa, okun solundaki değer, sağındaki değişkene atanır.

Örneğin son satırında, bu şekilde seker değişkenine atama yapılmıştır.

Vektörler, R Project için en basit veri yapılarıdır. Bu veri yapıları kullanılarak çeşitli işlemler yapılabilir.

Örneğin basit 4 işlem için + – * ve / operatörleri kullanılabilir (sırasıyla, toplama, çıkarma, çarpma ve bölme işlemlerinin sembolleri)

Bir önceki örnekte sadi değişkeninin içerisine bir vektör ataması yapıldı. Bu vektör üzerinde, aşağıdaki şekilde işlemler yapılabilir:

Görüldüğü üzere yukarıda, sırasıyla, bölme, toplama, çarpma ve çıkarma işlemleri gösterilmiştir. Örneğin ilk örnekte 1/sadi komutu ile, sadi değişkeni içerisinde bulunan bütün değerlerin 1’e bölümünden çıkan yeni vektör görüntülenmiştir.

Bu vektörü görüntülemek yerine yukarıdaki örnekte olduğu gibi a isimli bir değişkene atama yapılıp, ileride de kullanılabilir.

Yukarıdaki bu dört işlem dışında, R Project içerisinde, vektörler için geniş bir fonksiyon kütüphanesi bulunur. Bunlardan sık kullanılan bazılarını anlatalım.

Bu örneklerden, sum, vektör elemanlarının toplamını, mean ortalamasını ve length eleman sayısını bulmaya yarar.

Vektör değeri üretilmesi sırasında da R Project içerisinde bazı kolay komutlar bulunmaktadır.

Örneğin : operatörü, bir dizi oluştururken, başlangıç ve bitiş değerlerini alır. Bu değerler arasında birer birer artan bir dizi oluşturur. 1:10 dizisi bu şekilde oluşturulmuştur.

Bu iş için seq fonksiyonu da kullanılabilir. Bu fonksiyon iki parametre alabileceği ve : operatörüne denk kullanılabileceği gibi üçüncü bir parametre daha alıp artış miktarını ayarlayabilir. Seq(1,10,by=2) yazımında, by=2, artış miktarının 2şer 2şer olacağını anlatır. Örneğin by=.2 şeklinde 0.2 olarak da arttırılabilirdi. Aynı durum, : operatörü ile bir dizi oluşturup bir sabit ile çarparak da oluşturulabilir.

Ayrıca seq fonksiyonuna parametre olarak from ve length değerleri de verilebilir.

Length, vektörün eleman sayısını, from ise başlangıç değerini belirtir.

Rep fonksiyonu, bir vektörün tekrarlaması (repeat) için kullanılır. Bu tekrar işlemi, aynı vektörün arka arkaya tekrarlanması şeklinde ise times parametresine kaç tekrar istendiği verilerek, şayet vektörün her elamanı tekrarlanacaksa each parametresine sayı verilerek yapılabilir.

Dizgi (String) Vektörleri

Yukarıdaki bölümde anlatıldığı üzere vektörleri sayılardan oluşturmak mümkün olduğu gibi, dizgilerden (string) oluşturmak da mümkündür.

R Project içerisinde, bir dizgiyi (string) belirten sembol çift tırnaktır.

Örnekte görüldüğü üzere, c fonksiyonu kullanılarak bu kez ali isminde bir dizgi vektörü oluşturulmuştur.

Dizgilerde özel sembollerin yazılması için sembolü kullanılır. Örneğin zaten tırnak içerisindeki bir dizgiye tırnak sembolü konulmak istenirse ” şeklinde yazılması gerekir. Benzer şekilde işaretini bir dizginin içerisine yerleştirmek için \ şeklinde iki kere tekrar edilmesi gerekir.

Vektör Indisleri (Indexes)

Vektörlerle çalışırken, önemli konulardan birisi de indekslerin doğru kullanılmasıdır. Basitçe bir vektörün içerisindeki bir veya birden çok belirli elemanlara erişmeye yarayan operatördür. [] şeklinde köşeli parantezlerle kullanılır.

Örneğin yukarıdaki ilk kullanımda, a,b şeklindeki bir vektöre indis olarak 1,2,2,1,1 şeklindeki ikinci bir vektör indis olarak veriliyor. Bunun anlamı, ilk vektördeki a,b ikilisindeki elemanların hangi sırayla tekrarlanacağıdır. Yani a elemanı 1. Eleman, b elemanı ise ikinci eleman, o halde 1,2,2,1,1 vektöründeki 1 yerine a ve 2 yerine b konulması istenmiştir.

Yukarıdaki ikinci örnekte, a isimli bir vektör içerisine 1’den 20’ye kadar olan çift sayılar yerleştirilmiştir. İndis olarak verilen vektör ise 3,2,8 olduğuna göre, vektörün bu elemanları sonuçta görüntülenir.

İndis kullanımında, tek bir sayı verilerek, sadece bu elemana doğrudan erişilebileceği gibi, eksi sayılar kullanılarak, vektörden bu elemanlar çıkarılabilir. Örneğin a[-2] kullanımı, vektörden 2. Elemanın çıkarılması anlamındadır. a[1:3*-2] kullanımı ise aslında a[c(-2,-4,-6)] olduğuna göre, 2. 4. Ve 6. Elemanların çıkarılması anlamındadır.

Vektör seviyeleri (levels)

Vektörlerde önemli bir konu da, vektörler üzerinde oluşturulan seviyelerdir. Basitçe bir vektörde birden fazla tekrar eden bir bilgi bulunuyorsa, bu bilgi bir üst seviyede gruplanabilir.

Yukarıdaki örnekte, gorev ve maas isimli iki vektör değişkeni bulunmaktadır. Gorev değişkeninde, bazı görevlerin tekrarlı olduğuna dikkat ediniz.

8 adet görev ve her görevdekilerin maaşının yazılı olduğu 8 adet maaştan oluşan iki ayrı vektör bulunuyor.

Öncelikle factor komutunu kullanarak, gorev vektöründeki seviyeleri çıkarıyoruz. Nitekim, factor komutundan sonra bize Levels: …. Şeklinde ikinci bir satıda, çıkarılan seviyeleri listeliyor. Görüldüğü üzere factors komutu, kümeleme işlemi yapmaktadır. Küme teorisinde (set theory) bir eleman sadece bir kere geçebilir. Dolayısıyla çıkarılan levels listesinde de her eleman tek bir kere geçmektedir. Ayrıca alfabetik olarak sıralamaktadır.

Bu listeye levels() fonksiyonu ile ulaşılabilir.

Tapply fonksiyonu ise iki vektörü bir fonksiyon üzerinden birleştirmeye yarar. Örneğin her gorevin ortalama maaşını hesaplamak için mean, toplamı için de sum fonksiyonu, yukarıdaki örnekte kullanılmıştır.

Bu kullanımı, SQL dilinde bulunan group by kelimesine benzetmek mümkündür. Öncelikle gruplama yapılıp ardından grup fonksiyonu uygulanmaktadır.

Diziler ve Matrisler

R Project içerisinde, çok boyutlu vektörler için dizi (array) kelimesi kullanılır. Buna göre, vektör tek boyutlu bir veri yapısı iken, diziler (array) çok boyutlu olabilir.

Bu anlamda, matrisler (matrix) iki boyutlu diziler olarak kabul edilebilir. Diziler, üç veya daha fazla boyutta da olabilir.

Yukarıdaki örnekte olduğu üzere, 1:18 ile 1’den 18’e kadar sayılar oluşturulmuş ardından bu sayılardan oluşan vektör, 2 boyutlu bir dizinin (array) içerisine döşenmiştir. Bu dizinin boyutları ise dim=c(3,6) komutu ile 3×6 şeklinde verilmiştir.

Yukarıdaki bu kullanımı, indis kullanımı ile birleştirmek de mümkündür.

Dizi[2], kullanımı, dizinin 2. Elemanına erişirken, dizi[2,] kullanımı 2. Satıra, ve dizi[,2] kullanımı da 2. Sütuna işaret etmektedir.

Bu indisler kullanılarak, dizi üzerinde değişiklik yapılması da mümkündür.

İlk örnekte, dizinin 3. Elemanına 111 sayısı konulmuştur. BU işlemden sonra dizinin [3,1] elemanı 111 olarak değişmiştir.

İkinci örnekte ise, dizinin ilk sütunu, 9,9,9 vektörü ile değiştirilmiştir.

Matrislerde İşlemler

Matrislerde lineer cebir (linear algebra) gereği bazı işlemlerin R Project ile kolayca yapılması mümkündür.

Örneğin temel matris işlemlerini ele alalım:

Yukarıda iki adet 2×2 boyutlarındaki (a ve b) matrisin sırasıyla, toplanması, çarpılması, çıkarılması ve bölünmesine örnekler gösterilmiştir.

Benzer şekilde, matrislere özgü bazı işlemlerin yapılması da mümkündür. Örneğin iki matrisin Kartezyen çarpımı için (outer product) %o% şeklinde üç sembolden oluşan bir operatör kullanılması mümkündür:

Görüldüğü üzere sonuç, 4 boyutlu bir matristir.

Matris tersyüzü için (transpose) t() fonksiyonu kullanılabilir:

Görüldüğü üzere a matrisinin tersyüzü alınmıştır.

Matrisin tersini almak için solve() fonksiyonu kullanılabilir.

Görüldüğü üzere a matrisinin, çarpmaya göre tersi alınmıştır.

Listeler (LISTS)

R Project içerisinde kullanılan diğer bir veri tipi de listelerdir. Listelerin vektörlere göre farkı, veriyi sayısal indis yerine istenen bir veri tipinde indisleyebilmesidir.

Yukarıdaki örnekte görüldüğü üzere, eleman isimli bir liste oluşturulmuştur. Bu listenin ilk iki elemanı dizgi (string) yapısında iken 3. Eleman sayı ve son elemanı bir vektördür.

Listenin bir elemanına erişilirken, bu erişim için [[ ]] şeklinde çift köşeli parantez kullanılır.

Yukarıdaki örnekteki son satırda, listenin 4. Elemanına erişilmiş, bu eleman bir vektör olduğu için de bu vektörün ilk elemanına erişilmiştir.

Ayrıca yukarıdaki listenin herhangi bir bilgisi, doğrudan ismi kullanılarak aranabilir.

Listelere eleman eklemek veya değiştirmek için, bu elemanın indis numarası kullanılabilir.

Yukarıdaki örnekte görüldüğü üzere eleman listesine yeni bir değer 5. Sırada eklenmiştir.

Yorumlar

  1. melis koçak

    Merhaba…Üniversite öğrencisiyim.R dilinde çok yeniyim.Komutları bilsem de kullanmakda zorlanıyorum.ve elimde yapmam gereken bir çalışma var.R bilen biri içinkolay bir demo çalışması olsa da ben hangi komutu gireceğimi bilmediğim için ne kadar uğraşsam da yapamıyorum.bu konuda bana yardımcı olabilirmisiniz? En azından hangi komutu nerde gireceğimi genel olarak söylerseniz çok sevinirim. Ankarada yaşıyorum.Eger siz de Ankaradaysanız bu konuda sizden ders de almak isterim. ve şuan için eğer sizin için de uygun olursa çalışmam hakkında bilgi verebilirim.Teşekkür ederim iyi çalışmalar.

  2. Şadi Evren ŞEKER Article Author

    Merhaba Melis Hanım;

    Yukarıda, hiç bilmeyen birisi için hızlı bir başlangıç olabilecek şeyleri yazmaya çalıştım. Projenize ne kadar katkısı olur bilmiyorum ama belki projenizden daha detaylı bahsederseniz, işinize yarayacak bazı noktaları, vakit imkanı doğrultusunda, yine siteden yayınlayıp, sizin gibi araştırmacılara faydalı olabiliriz.

    Başarılar

  3. erkan ikiz

    merhaba şadi, ben R ye kod eklemesi yapıcam arkaplan da çalışmam gerekiyor. nasıl ekleyebilceğim konusunda bi fikrin var mı?

  4. Şadi Evren ŞEKER Article Author

    kabaca, R project kodlaması için 3 yöntem bulunmaktadır.

    1. R projectin koduna müdahale edebilirsiniz. Bunun için bakmanız gereken kaynak http://developer.r-project.org/ sitesidir.
    2. R projecti başka bir program üzerinden çağırabilirsiniz. Bunun için komut yönlendirmesi yapmanız yeterlidir. Ayrıca verileriniz, dosya sistemi üzerinden aktarabilirsiniz.
    3. Son yöntem olarak da R project üzerinde bir eklenti yazmanız mümkündür. Genelde bu eklentilere arayüz ismi verilmekle birlikte, çoğu java dilinde hazırlanan ve R project içerisindeki jar dosyalarına eklenen kodlardır. Bu tip kodlarla uğraşacaksanız yine tavsiyem rJAVA ile işe başlamanız olacaktır.

    başarılar

  5. b.ebru

    merhaba, R programında dizinleri (ls) Z’den A’ya sıralamam gerekiyor. nasıl yapabilirim yardımcı olur musunuz ?

    1. Şadi Evren ŞEKER

      dizindeki dosyaları listelemek için list.files() bunun tersini almak için ise rev() fonksiyonlarını kullanabilirsiniz. Kısacası rev(list.files()) şeklinde yazarsanız sanırım istediğiniz şekilde çalışacaktır.

      Başarılar

  6. burak

    Merhaba

    1: glm.fit: algorithm did not converge
    2: glm.fit: fitted probabilities numerically 0 or 1 occurred
    sorunlarının çözümü hakkında bilgi verebilir misiniz?
    glm modeli için hazırlanan r script te bu sorunlar çıkıyor yardımcı olabilir misiniz?

  7. pınar

    merhaba , ben de R programında çok yeniyim ve bir ödevim var bunu R ile yapabilir miyim? bunun kodlarını söyleyebilir misiniz? 2 Word dosyasında öğretim üyelerinin isimleri var.birsinde 2000 diğerinde 5000 tane. eşleşen isimleri yeni bir listede toplamam gerekiyor. yardımcı olursanız çok sevinirim

Şadi Evren ŞEKER için bir cevap yazın Cevabı iptal et

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir