6 İş akışı: scriptler
Bu bölümde kodunuzu düzenlemek için kullanılan iki temel araçla tanışacaksınız: scriptler ve projeler.
6.1 Scriptler
Şimdiye kadar kod çalıştırmak için konsolu kullandınız. Burası başlangıç için harika bir yerdir; ancak daha karmaşık ggplot2 grafikleri ve daha uzun dplyr işlem hatları oluşturdukça alanın kısa sürede dar geldiğini fark edersiniz. Kendinize çalışmak için daha fazla alan sağlamak için script editörünü kullanın. File menüsünden New File ve ardından R Script seçeneklerini seçerek ya da Cmd/Ctrl + Shift + N klavye kısayolunu kullanarak editörü açın. Şimdi Şekil 6.1’teki gibi dört panel göreceksiniz. Script editörü, kodunuzla denemeler yapmak için harika bir yerdir. Bir şeyi değiştirmek istediğinizde, tüm kodu yeniden yazmanız gerekmez; scripti düzenleyip yeniden çalıştırabilirsiniz. Ve işe yarayan ve istediğinizi yapan bir kod yazdığınızda, daha sonra kolayca geri dönmek için onu bir script dosyası olarak kaydedebilirsiniz.
6.1.1 Kod çalıştırma
Script editörü, karmaşık ggplot2 grafikleri veya uzun dplyr işlem dizileri oluşturmak için mükemmel bir yerdir. Script editörünü etkili bir şekilde kullanmanın anahtarı, en önemli klavye kısayollarından birini ezberlemektir: Cmd/Ctrl + Enter. Bu, konsoldaki mevcut R ifadesini çalıştırır. Örneğin, aşağıdaki kodu ele alalım.
library(dplyr)
library(nycflights13)
not_cancelled <- flights |>
filter(!is.na(dep_delay)█, !is.na(arr_delay))
not_cancelled |>
group_by(year, month, day) |>
summarize(mean = mean(dep_delay))İmleciniz █’de ise, Cmd/Ctrl + Enter’a basmak not_cancelled’ı üreten komutun tamamını çalıştırır. Ayrıca imleci bir sonraki ifadeye (not_cancelled |> ile başlayan) taşır. Bu, Cmd/Ctrl + Enter’a tekrar tekrar basarak tüm scriptinizde adım adım ilerlemeyi kolaylaştırır.
Kodunuzu ifade ifade çalıştırmak yerine, tüm scripti Cmd/Ctrl + Shift + S ile tek adımda da çalıştırabilirsiniz. Bunu düzenli olarak yapmak, kodunuzun tüm önemli kısımlarını scriptte yakaladığınızdan emin olmanın harika bir yoludur.
Scriptinize her zaman ihtiyaç duyduğunuz paketlerle başlamanızı öneririz. Bu şekilde, kodunuzu başkalarıyla paylaşırsanız, hangi paketleri kurmaları gerektiğini kolayca görebilirler. Ancak paylaştığınız bir scripte asla install.packages() eklememeniz gerektiğini unutmayın. Dikkatli davranmadıklarında bilgisayarlarında değişiklik yapacak bir scripti başkasına vermek düşüncesizce olur!
Sonraki bölümlerde çalışırken, script editöründe başlamanızı ve klavye kısayollarınızı pratik etmenizi şiddetle öneririz. Zamanla, kodu bu şekilde konsola göndermek o kadar doğal hale gelecek ki, bunu düşünmeyeceksiniz bile.
6.1.2 RStudio tanılamaları
Script editöründe, RStudio sözdizimi hatalarını kırmızı dalgalı bir çizgi ve kenar çubuğunda bir çarpı işaretiyle vurgular:

Sorunun ne olduğunu görmek için çarpı işaretinin üzerine gelin:

RStudio ayrıca olası sorunlar hakkında da sizi bilgilendirecektir:

6.1.3 Kaydetme ve adlandırma
RStudio, çıktığınızda script editörünün içeriğini otomatik olarak kaydeder ve yeniden açtığınızda otomatik olarak yeniden yükler. Yine de Untitled1, Untitled2, Untitled3 gibi adlardan kaçınmak; scriptlerinizi kaydedip onlara açıklayıcı adlar vermek iyi bir fikirdir.
Dosyalarınızı code.R veya myscript.R olarak adlandırmak cazip gelebilir; ama dosyanız için bir isim seçmeden önce biraz daha derin düşünmelisiniz. Dosya adlandırmayla ilgili üç önemli ilke şunlardır:
- Dosya adları makine tarafından okunabilir olmalıdır: boşluklardan, sembollerden ve özel karakterlerden kaçının. Dosyaları ayırt etmek için büyük/küçük harf duyarlılığına güvenmeyin.
- Dosya adları insan tarafından okunabilir olmalıdır: dosyanın içinde ne olduğunu açıklamak için dosya adlarını kullanın.
- Dosya adları varsayılan sıralamayla iyi çalışmalıdır: dosya adlarını sayılarla başlatın, böylece alfabetik sıralama onları kullanılma sırasına koyar.
Örneğin, bir proje klasöründe aşağıdaki dosyalara sahip olduğunuzu varsayalım.
alternative model.R
code for exploratory analysis.r
finalreport.qmd
FinalReport.qmd
fig 1.png
Figure_02.png
model_first_try.R
run-first.r
temp.txt
Burada çeşitli sorunlar vardır: Önce hangi dosyanın çalıştırılacağını bulmak zordur; dosya adlarında boşluklar bulunur; aynı ada sahip ancak büyük/küçük harfleri farklı iki dosya vardır (finalreport ve FinalReport1); bazı adlar da içeriği açıklamaz (run-first ve temp).
Aynı dosya kümesini adlandırmanın ve düzenlemenin daha iyi bir yolu şöyledir:
01-load-data.R
02-exploratory-analysis.R
03-model-approach-1.R
04-model-approach-2.R
fig-01.png
fig-02.png
report-2022-03-20.qmd
report-2022-04-02.qmd
report-draft-notes.txt
Anahtar scriptleri numaralandırmak, onları hangi sırayla çalıştıracağınızı açık hale getirir ve tutarlı bir adlandırma şeması, neyin değiştiğini görmeyi kolaylaştırır. Ayrıca, şekiller benzer şekilde etiketlenmiştir, raporlar dosya adlarına dahil edilen tarihlerle ayırt edilir ve temp, içeriğini daha iyi tanımlamak için report-draft-notes olarak yeniden adlandırılmıştır. Bir dizinde çok sayıda dosyanız varsa düzeni bir adım ileri götürüp farklı dosya türlerini (scriptler, şekiller vb.) ayrı dizinlere yerleştirmeniz önerilir.
6.2 Projeler
Bir gün R’dan çıkmanız, başka bir şey yapmanız ve daha sonra analizinize geri dönmeniz gerekecek. Bir gün, aynı anda birden fazla analiz üzerinde çalışacak ve bunları ayrı tutmak isteyeceksiniz. Bir gün dış dünyadan veriyi R’a getirmeniz, sayısal sonuçları ve şekilleri de R’dan yeniden dış dünyaya göndermeniz gerekecek.
Bu gerçek hayat durumlarıyla başa çıkmak için iki karar vermeniz gerekir:
Tek doğruluk kaynağı nedir? Neler olduğuna dair kalıcı kaydınız olarak neyi saklayacaksınız?
Analiziniz nerede bulunuyor?
6.2.1 Tek doğruluk kaynağı nedir?
Yeni başlayan biri olarak, analiziniz boyunca oluşturduğunuz tüm nesneleri içermesi için mevcut Environment’ınıza güvenmeniz sorun değildir. Ancak daha büyük projelerde çalışmayı ve başkalarıyla iş birliği yapmayı kolaylaştırmak için tek doğruluk kaynağınız R scriptleri olmalıdır. R scriptlerinizle (ve veri dosyalarınızla), ortamı yeniden oluşturabilirsiniz. Yalnızca ortamınızla, R scriptlerinizi yeniden oluşturmak çok daha zordur: ya hafızanızdan çok fazla kod yeniden yazmak zorunda kalırsınız (bu süreçte kaçınılmaz olarak hatalar yaparsınız) ya da R geçmişinizi dikkatlice kazmanız gerekir.
R scriptlerini analizinizin tek doğruluk kaynağı olarak tutabilmek için RStudio’ya çalışma alanınızı oturumlar arasında korumamasını söylemenizi özellikle öneririz. Bunu usethis::use_blank_slate() çalıştırarak2 veya Şekil 6.2’te gösterilen ayarları uygulayarak yapabilirsiniz. Bu karar kısa vadede biraz sıkıntı yaratır: RStudio’yu yeniden başlattığınızda önceki oturumda çalıştırdığınız kodu hatırlamaz; oluşturduğunuz nesneler ve okuduğunuz veri kümeleri kullanıma hazır olmaz. Ancak bu kısa vadeli sıkıntı sizi uzun vadeli sorunlardan kurtarır; çünkü bütün önemli işlemleri kodunuzda kaydetmeye zorlar. Önemli bir hesaplamanın yalnızca sonuçlarını ortamınızda sakladığınızı, hesaplamanın kendisini kodunuzda saklamadığınızı üç ay sonra keşfetmekten daha kötü bir şey yoktur.
Editördeki kodunuzun önemli kısımlarını yakaladığınızdan emin olmak için birlikte çalışan harika bir klavye kısayolu çifti vardır:
- R’ı yeniden başlatmak için Cmd/Ctrl + Shift + 0/F10’a basın.
- Mevcut scripti yeniden çalıştırmak için Cmd/Ctrl + Shift + S’ye basın.
Bu örüntüyü hepimiz haftada yüzlerce kez kullanıyoruz.
Alternatif olarak, klavye kısayollarını kullanmıyorsanız, Session > Restart R’a gidip ardından mevcut scriptinizi vurgulayıp yeniden çalıştırabilirsiniz.
RStudio Server kullanıyorsanız, R oturumunuz varsayılan olarak asla yeniden başlatılmaz. RStudio Server sekmenizi kapattığınızda, R’ı kapatıyormuşsunuz gibi hissedebilirsiniz; ama sunucu aslında onu arka planda çalışır durumda tutar. Bir sonraki dönüşünüzde, tam olarak bıraktığınız yerde olacaksınız. Bu, temiz bir sayfayla başlamak için R’ı düzenli olarak yeniden başlatmayı daha da önemli hale getirir.
6.2.2 Analiziniz nerede bulunuyor?
R’ın çalışma dizini (working directory) diye güçlü bir kavramı vardır. R, yüklemesini istediğiniz dosyaları burada arar ve kaydetmesini istediğiniz dosyaları buraya koyar. RStudio, mevcut çalışma dizininizi konsolun üstünde gösterir:

Bunu, getwd()’i çalıştırarak R kodunda da yazdırabilirsiniz:
getwd()
#> [1] "/Users/hadley/Documents/r4ds"Bu R oturumunda geçerli çalışma dizini (bunu “ev” olarak düşünebilirsiniz), Hadley’nin Documents klasöründeki r4ds alt klasörüdür. Bu kodu çalıştırdığınızda farklı bir sonuç döndürecektir; çünkü bilgisayarınızın dizin yapısı Hadley’ninkinden farklıdır!
Yeni başlayan bir R kullanıcısı olarak, çalışma dizininizin ev dizininiz, belgeler dizininiz veya bilgisayarınızdaki başka herhangi bir garip dizin olmasına izin vermeniz sorun değildir. Ama kitapta bir avuçtan fazla bölümü geride bıraktınız ve artık yeni başlayan biri değilsiniz. Artık projelerinizi dizinlerde düzenlemeye ve bir proje üzerinde çalışırken R’ın çalışma dizinini ilgili dizine ayarlamaya geçmelisiniz.
Çalışma dizinini R içinden ayarlayabilirsiniz; ama bunu önermiyoruz:
setwd("/path/to/my/CoolProject")Daha iyi bir yol var; sizi ayrıca R çalışmanızı bir uzman gibi yönetme yoluna da sokan bir yol. Bu yol, RStudio projesidir.
6.2.3 RStudio projeleri
Belirli bir projeyle ilişkili tüm dosyaları (girdi verisi, R scriptleri, analitik sonuçlar ve şekiller) tek bir dizinde bir arada tutmak, o kadar akıllıca ve yaygın bir uygulamadır ki, RStudio bunun için projeler aracılığıyla yerleşik destek sunar. Kitabın geri kalanında çalışırken kullanmanız için bir proje oluşturalım. File > New Project’e tıklayın, ardından Şekil 6.3’te gösterilen adımları izleyin.
Projenizi r4ds olarak adlandırın ve projeyi hangi alt dizine koyacağınızı dikkatlice düşünün. Onu mantıklı bir yerde saklamazsanız, gelecekte bulmak zor olacaktır!
Bu süreç tamamlandığında, yalnızca bu kitap için yeni bir RStudio projeniz olacak. Projenizin “evi”nin mevcut çalışma dizini olduğunu kontrol edin:
getwd()
#> [1] /Users/hadley/Documents/r4dsŞimdi aşağıdaki komutları script editörüne girin ve dosyayı “diamonds.R” adıyla kaydedin. Ardından, “data” adında yeni bir klasör oluşturun. Bunu, RStudio’daki Files panelindeki “New Folder” düğmesine tıklayarak yapabilirsiniz. Son olarak, proje dizininize bir PNG ve CSV dosyası kaydedecek olan tüm scripti çalıştırın. Ayrıntılar konusunda endişelenmeyin, bunları kitabın ilerleyen kısımlarında öğreneceksiniz.
RStudio’dan çıkın. Projenizle ilişkili klasörü inceleyin — .Rproj dosyasına dikkat edin. Projeyi yeniden açmak için o dosyaya çift tıklayın. Bıraktığınız yere döndüğünüze dikkat edin: çalışma dizini ve komut geçmişi aynıdır, üzerinde çalıştığınız bütün dosyalar da hâlâ açıktır. Ancak yukarıdaki talimatlarımızı izlediğiniz için, temiz bir sayfayla başladığınızı garanti eden tamamen taze bir ortamınız olacak.
İşletim sisteminizde tercih ettiğiniz yöntemle bilgisayarınızda diamonds.png dosyasını arayın. PNG dosyasını bulmanız şaşırtıcı değildir; ancak onu oluşturan scripti (diamonds.R) de bulursunuz. Bu muazzam bir kazanç! Bir gün, bir şekli yeniden oluşturmak veya sadece nereden geldiğini anlamak isteyeceksiniz. Şekilleri titizlikle R koduyla dosyalara kaydeder ve asla fareyle veya panoyla kaydetmezseniz, eski çalışmaları kolayca yeniden üretebileceksiniz!
6.2.4 Göreli ve mutlak yollar
Bir projenin içindeyken her zaman göreli yollar kullanmalı, mutlak yollar kullanmamalısınız. Aradaki fark nedir? Göreli bir yol, çalışma dizinine, yani projenin ana dizinine göre tanımlanır. Hadley yukarıda data/diamonds.csv yazdığında, bu /Users/hadley/Documents/r4ds/data/diamonds.csv için bir kısayoldu. Ama önemli olan şu ki, Mine bu kodu kendi bilgisayarında çalıştırsaydı, /Users/Mine/Documents/r4ds/data/diamonds.csv’ye işaret ederdi. Göreli yolların önemli olmasının nedeni budur: R proje klasörü nereye taşınırsa taşınsın çalışırlar.
Mutlak yollar, çalışma dizininizden bağımsız olarak aynı yere işaret eder. İşletim sisteminize bağlı olarak biraz farklı görünürler. Windows’ta bir sürücü harfiyle (örneğin, C:) veya iki ters eğik çizgiyle (örneğin, \\servername) başlarlar; Mac/Linux’ta ise bir eğik çizgiyle “/” (örneğin, /users/hadley) başlarlar. Scriptlerinizde mutlak yolları asla kullanmamalısınız; çünkü paylaşmayı engellerler: sizinle tam olarak aynı dizin yapılandırmasına sahip başka kimse olmayacaktır.
İşletim sistemleri arasında bir başka önemli fark daha var: yolun bileşenlerini nasıl ayırdığınız. Mac ve Linux eğik çizgi kullanır (örneğin, data/diamonds.csv), Windows ise ters eğik çizgi kullanır (örneğin, data\diamonds.csv). R her iki türle de çalışabilir (şu anda hangi platformu kullandığınız fark etmeksizin); ama ne yazık ki ters eğik çizgiler R için özel bir anlam taşır ve yolda tek bir ters eğik çizgi elde etmek için iki ters eğik çizgi yazmanız gerekir! Bu durum işleri gereksiz yere zorlaştırır; bu yüzden her zaman düz eğik çizgi kullanan Linux/Mac biçimini öneririz.
6.3 Alıştırmalar
RStudio Tips Twitter hesabına, https://twitter.com/rstudiotips, gidin ve ilginç görünen bir ipucu bulun. Onu kullanmayı pratik edin!
RStudio tanılamaları başka hangi yaygın hataları raporlayacak? Öğrenmek için https://support.posit.co/hc/en-us/articles/205753617-Code-Diagnostics-in-the-RStudio-IDE adresini okuyun.
6.4 Özet
Bu bölümde R kodunuzu scriptlerde (dosyalarda) ve projelerde (dizinlerde) nasıl düzenleyeceğinizi öğrendiniz. Kod stili gibi, bu da başlangıçta angarya gibi hissettirebilir. Ancak birden fazla projede kod biriktirdikçe başlangıçta kurulan küçük bir düzenin ileride ne kadar zaman kazandırdığını göreceksiniz.
Özetle, scriptler ve projeler size gelecekte işinize yarayacak sağlam bir iş akışı sağlar:
- Her veri analizi projesi için bir RStudio projesi oluşturun.
- Scriptlerinizi (bilgilendirici isimlerle) projede kaydedin, düzenleyin, parça parça veya bütün olarak çalıştırın. Scriptlerinizde her şeyi yakaladığınızdan emin olmak için R’ı sık sık yeniden başlatın.
- Yalnızca göreli yolları kullanın; mutlak yolları kullanmayın.
Böylece ihtiyacınız olan her şey tek bir yerde ve üzerinde çalıştığınız diğer tüm projelerden düzgünce ayrılmış olur.
Şimdiye kadar, R paketlerinin içine paketlenmiş veri kümeleriyle çalıştık. Bu, önceden hazırlanmış veri üzerinde biraz pratik yapmayı kolaylaştırır; ama açıkçası veriniz bu şekilde mevcut olmayacaktır. Bu yüzden bir sonraki bölümde, readr paketini kullanarak diskten R oturumunuza veri yüklemeyi öğreneceksiniz.
Dosya adında “final” kullanarak kaderi zorladığınızdan söz etmiyorum bile 😆 Piled Higher and Deeper adlı çizgi romanda bununla ilgili eğlenceli bir bant var.↩︎
usethis kurulu değilse,
install.packages("usethis")ile kurabilirsiniz.↩︎