40 R Markdown ile Raporlar
R Markdown, raporlar gibi otomatik, tekrarlanabilir ve paylaşılabilir çıktılar oluşturmak için yaygın olarak kullanılan bir araçtır. Word, pdf, html, powerpoint ve diğer formatlarda statik veya etkileşimli çıktılar üretebilir.
Bir R Markdown betiği, R kodunu metnin arasına serpiştirir, böylece betik aslında çıktı belgeniz olur. Anlatım metni (verilerinize göre dinamik olarak değişebilir), tablolar, şekiller, madde işaretleri/sayılar, bibliyografyalar vb. dahil olmak üzere biçimlendirilmiş bir belgenin tamamını oluşturabilirsiniz. Bu tür belgeler, rutin güncelleme (örneğin, günlük gözetim raporları) ve/veya veri alt kümeleri (örneğin, yargı raporları) üzerinde çalışmak amacıyla üretilebilir.
Bu el kitabındaki diğer sayfalarda bu konu detaylı olarak anlatılmaktadır: • Rutin raporları organize etme sayfası, otomatik oluşturulan zaman damgalı klasörlerle rapor üretiminizin nasıl otomatik hale getirileceğini gösterir. • R Markdown içeren Panolar sayfası, bir R Markdown raporunun pano olarak nasıl biçimlendirileceğini açıklar.
Not : R4Epis projesi, MSF proje lokasyonlarında karşılaşılan yaygın salgın ve çalışma senaryoları için şablon olan R Markdown komut dosyaları geliştirmiştir.
40.1 Hazırlık
R Markdown arkaplanı
İlgili bazı kavram ve paketleri açıklamak için: • Markdown, html ve diğer formatlara dönüştürülebilen, düz metin kullanarak bir belge yazmanıza izin veren bir “dildir”. R’ye özgü değildir. Markdown’da yazılan dosyalar ‘.md’ uzantısına sahiptir. • R Markdown, R’ye özgü bir markdown varyasyonudur - metin üretmek, R kodunu gömmek ve çıktılarını görüntülemek için markdown kullanarak belge yazmanızı sağlar. R Markdown dosyaları “.Rmd” uzantısına sahiptir. • rmarkdown - paketi: Bu, R tarafından .Rmd dosyasını istenen çıktıya dönüştürmek için kullanılır. Odak noktası, dosyayı markdown (metin) sözdizimini dönüştürmektir. • knitr: Bu R paketi kod parçalarını okur, yürütür ve belgeye geri “örer”. Tablolar ve grafikler bu şekilde metnin yanına eklenir. • Pandoc: Son olarak, pandoc çıktıyı word/pdf/powerpoint vb.’ye dönüştürür. R’den ayrı bir yazılımdır ancak RStudio ile otomatik olarak yüklenir. • Özetle, arka planda gerçekleşen süreç (tüm bu adımları bilmenize gerek yoktur!), .Rmd dosyasının knitr’yi beslemesini içerir. Bu paket R kodu parçalarını yürütür ve yeni bir .md (markdown) dosyası oluşturur. R kodu ve işlenmiş çıktısı. .md dosyası daha sonra bitmiş ürünü oluşturmak için pandoc tarafından işlenir: bir Microsoft Word belgesi, HTML dosyası, powerpoint belgesi, pdf, vb. oluşturulur
(kaynak: https://rmarkdown.rstudio.com/authoring_quick_tour.html):
Yükleme
Bir R Markdown çıktısı oluşturmak için aşağıdakilerin kurulu olması gerekir:
• rmarkdown paketi (knitr ayrıca otomatik olarak kurulacaktır) • RStudio ile birlikte gelmesi gereken Pandoc. RStudio kullanmıyorsanız, Pandoc’u buradan indirebilirsiniz: http://pandoc.org. • PDF çıktısı oluşturmak istiyorsanız (biraz daha zor), LaTeX’i kurmanız gerekecek. Daha önce LaTeX yüklememiş olan R Markdown kullanıcıları için TinyTeX’i (https://yihui.name/tinytex/) yüklemenizi öneririz. Aşağıdaki komutları kullanabilirsiniz:
::p_load(tinytex) # tinytex paketini yükleyin
pacman::install_tinytex() # TinyTeX yazılımını yüklemek için R komutu tinytex
40.2 Başlangıç
rmarkdown R paketini yükleme
rmarkdown R paketini kurun. Bu el kitabında, gerekirse paketi kuran ve kullanım için yükleyen pacman’ın p_load() işlevini vurguluyoruz. Ayrıca, temel R’dan library() ile kurulu paketleri yükleyebilirsiniz. R paketleri hakkında daha fazla bilgi için R temelleri ile ilgili sayfaya bakın.
::p_load(rmarkdown) pacman
Yeni bir Rmd dosyası başlatmak
RStudio’da, ‘Dosya’, ardından ‘Yeni dosya’ ve ardından ‘R markdown…’ ile başlayan yeni bir R markdown dosyası açın.
R Studio size bazı çıktı seçenekleri sunacaktır. Aşağıdaki örnekte bir html belgesi oluşturmak istediğimiz için “HTML”yi seçiyoruz. Başlık ve yazar isimleri önemli değildir. İstediğiniz çıktı belgesi türü bunlardan biri değilse endişelenmeyin - herhangi birini seçip daha sonra komut dosyasında değiştirebilirsiniz.
Bu, yeni bir .Rmd betiği açacaktır.
Bilinmesi önemli noktalar
Çalışma dizini
Bir markdown dosyasının çalışma dizini, Rmd dosyasının kendisinin kaydedildiği yerdir. Örneğin, R projesi ‘~/Documents/projectX’ içindeyse ve Rmd dosyasının kendisi ‘~/Documents/projectX/markdownfiles/markdown.Rmd’ alt klasöründeyse, markdown içindeki read.csv(“data.csv”) kodu projelerdeki komut dosyalarının normalde otomatik olarak bakacağı kök proje klasöründe değil, ‘markdownfiles’ klasöründe bir csv dosyası arayacaktır.
Başka bir yerde dosyalara başvurmak için ya tam dosya dizinini kullanmanız ya da buradaki paketi kullanmanız gerekecektir. Buradaki paket, çalışma dizinini R projesinin kök klasörü olarak ayarlar. Bu işlem el kitabının R projeleri ve içe ve dışa aktarma sayfalarında ayrıntılı olarak açıklanmıştır. Örneğin, projeX klasöründen “data.csv” adlı bir dosyayı içe aktarmak için kod import(here(“data.csv”) olacaktır).
R Markdown komut dosyalarında ‘setwd()’ fonksiyonunun kullanımının önerilmediğini unutmayın - yalnızca yazıldığı kod parçası için geçerlidir.
Bilgisayarınızda bir sürücü üzerinde çalışmak
R Markdown, paylaşılan bir ağ sürücüsünde çalışırken pandoc sorunlarıyla karşılaşabileceğinden, klasörünüzün yerel makinenizde olması önerilir, örn. ‘Belgelerim’ içindeki bir projede. Git kullanıyorsanız (çok tavsiye edilir!), size tanıdık gelecektir. Daha fazla ayrıntı için, ağ sürücülerinde R’deki el kitabı sayfalarına ve [Hatalar ve yardım]’a bakın.
40.3 R Markdown bileşenleri
Bir R Markdown belgesi, standart bir R betiği gibi RStudio’da düzenlenebilir. Yeni bir R Markdown komut dosyası başlattığınızda, RStudio, R Markdown komut dosyasının farklı bölümlerini açıklayan bir şablon göstererek destek sağlar.
Aşağıdaki, bir html çıktısı oluşturmayı amaçlayan yeni bir Rmd betiğinin başlatıldığında izlenen bileşenler görülmektedir. (önceki bölüme göre).
Gördüğünüz gibi, bir Rmd dosyasının üç temel bileşeni vardır: YAML, Markdown metni ve R kodu parçaları.
Bunlar, belge çıktınızı oluşturacaktır. Aşağıdaki şemaya bakın:
YAML metadatası
“YAML meta verileri” veya yalnızca “YAML” olarak anılan bu bileşen, R Markdown belgesinin en üstündedir. Komut dosyasının bu bölümü, Rmd dosyanız için ne tür bir çıktı üretileceğini, biçimlendirme tercihlerini ve belge başlığı, yazar ve tarih gibi diğer meta verileri gösterecektir. Burada belirtilmeyen başka kullanımlar da vardır (Çıktı oluşturma’ bölümünde anlatılmaktadır). Girintilerin önemli olduğunu unutmayın; sekmeler kabul edilmez ancak boşluklar kabul edilir.
Bu bölüm yalnızca üç tire (—) içeren bir satırla başlamalı ve yalnızca üç tire içeren bir satırla kapatılmalıdır. YAML parametreleri anahtar:değer (key:value) çiftleri halinde kodlanır. YAML’de iki nokta üst üste işareti (:) yerleşimi önemlidir - anahtar:değer çiftleri iki nokta üst üste işareti ile ayrılır (eşittir işaretleriyle değil!).
YAML, belge için meta verilerle başlamalıdır. Bu birincil YAML parametrelerinin (girintisiz) sırası önemli değildir. Örneğin:
title: "My document"
author: "Me"
date: "2024-09-18"
R kodunu YAML değerleri içinde satır içi kod olarak (ters tikler içinde, r önce gelir) veya tırnak işaretleri içinde yazarak kullanabilirsiniz (tarih için yukarıdaki örneğe bakın:).
Yukarıdaki resimde, varsayılan çıktımızın bir html dosyası olacağını seçtiğimiz için, YAML’nin çıktı: html_document olarak kodlandığını görebiliriz. Ancak bunu powerpoint_presentation veya word_document veya hatta pdf_document olarak değiştirebiliriz.
Metin
Metin, başlıklar da dahil olmak üzere belgenizin anlatımıdır. Birçok farklı yazılımda kullanılan “markdown” dilinde yazılmıştır.
Aşağıda bu metni yazmanın temel yolları bulunmaktadır. RStudio web sitesindeki R Markdown “cheatsheet”te bulunan daha kapsamlı belgelere bakın. RStudio website.
Yeni Satırlar
Benzersiz bir şekilde R Markdown’da yeni bir satır başlatmak için önceki satırın sonuna *iki boşluk** girin ve ardından Enter/Return uygulayın
Metin Karakteri
Çıktıda nasıl görüneceğini değiştirmek için normal metninizi bu karakterlerle çevreleyin.
• İtalik yapmak için alt çizgi (metin) veya tek bir yıldız (metin) • Kalın metin için çift yıldız (metin) • Metni kod olarak görüntülemek için ters tik (metin)
Yazı tipinin gerçek görünümü, belirli şablonlar kullanılarak ayarlanabilir (YAML meta verilerinde belirtilir; örnek sekmelere bakın).
Renk
R Markdown’da metnin rengini değiştirmek için basit bir mekanizma yoktur. Çıktınız bir HTML dosyasıysa, geçici bir çözüm, işaretleme metnine bir HTML satırı eklemektir. Aşağıdaki HTML kodu, kalın kırmızı renkte bir metin satırı yazdıracaktır.
<span style="color: red;">**_DANGER:_** This is a warning.</span>
**__TEHLİKE:_** Bu bir uyarıdır.
Başlıklar
Bir R Markdown betiğinin metin bölümündeki hash (#) sembolü, bir başlık oluşturur. Bu, normal bir R betiğinde olduğu gibi, bir hash sembolünün yorum yapma/açıklama ekleme/devre dışı bırakma mekanizması olduğu komut dosyasındaki bir R kodundan farklıdır.
Yeni bir satırın başlangıcında farklı sayıda hash sembolü ile farklı başlık seviyeleri oluşturulur. Bir hash sembolü, bir başlık veya birincil başlıktır. İki hash sembol, ikinci düzey bir başlıktır. Üçüncü ve dördüncü seviye başlıklar, art arda daha fazla hash sembolü ile yapılabilir.
# Birinci düzey başlık / Genel başlık
## İkinci seviye başlık
### Üçüncü seviye başlık
Madde İşaretleri ve Numaralandırma
Bir madde işareti listesi oluşturmak için yıldız işaretlerini (*) kullanın. Önceki cümleyi bitirin, iki boşluk bırakın, iki kez Enter/Return yapın ve ardından madde işaretlerinizi başlatın. Yıldız işareti ile madde işareti ile metniniz arasına bir boşluk ekleyin. Her madde işaretinden sonra iki boşluk girin ve ardından Enter/Return yapın. Alt madde işaretleri aynı şekilde çalışır ancak girintilidir. Sayılar aynı şekilde çalışır, ancak yıldız işareti yerine 1), 2) vb. yazın. Aşağıda R Markdown komut dosyası metninizin nasıl görünebileceği açıklanmıştır.
Madde işaretlerim (bu kolondan sonra iki boşluk var):
* Madde 1 (ardından iki boşluk ve Enter/Return)
* Madde 2 (ardından iki boşluk ve Enter/Return)
* Alt madde işareti 1 (ardından iki boşluk ve Enter/Return)
* Alt madde 2 (ardından iki boşluk ve Enter/Return)
Metne yorum yapılması
Tıpkı bir R parçasındaki bir R kodu satırını yorumlamak için “#” kullanabildiğiniz gibi, R İşaretleme metnini “yorumlayabilirsiniz”. Metni seçip ve Ctrl+Shift+c (Mac için Cmd+Shift+c) tuşlarına basın. Metin oklarla çevrelenecek ve yeşil renk alacaktır. Çıktınızda görünmeyecektir.
Kod parçaları
Komut dosyasının R kodunu çalıştırmaya ayrılmış bölümlerine “parçalar” denir. Bu parçalar, paketleri yükleyebileceğiniz, verileri içe aktarabileceğiniz ve veri yönetimi ve görselleştirmesini gerçekleştirebileceğiniz yerlerdir. Çok sayıda kod parçası olabilir ve bu parçalar R kodunuzu metne serpiştirerek parçalar halinde organize etmenize yardımcı olabilir. Not: Bu “parçalar”, belgenin anlatım kısmından farklı bir arka plan rengine sahiptir. Her parça, üç ters tik ile başlayan bir satır ve parça için parametreleri içeren küme parantezleri ({ }) ile açılır. Parça üç tane daha geri tik ile sona erer.
“Ctrl + Alt + i” (veya Mac’te Cmd + Shift + r) klavye kısa yollarını kullanarak veya komut dosyası düzenleyicinizin en üstünde ‘yeni bir kod parçası ekle’ simgesini tıklayarak yeni bir parça oluşturabilirsiniz. { } küme parantezlerinin içeriği hakkında bazı notlar:
• Parça içindeki kodlama dilinin R olduğunu belirtmek için ‘r’ ile başlarlar. • r’den sonra isteğe bağlı olarak bir kod parçası “adı” yazabilirsiniz – bu ad gerekli değildir ancak işinizi organize etmenize yardımcı olabilir. Parçalarınızı adlandırırsanız, HER ZAMAN benzersiz adlar kullanmanız gerektiğini unutmayın, aksi takdirde R, oluşturmayı denediğinizde hata verir.
• Kıvrımlı parantezler, etiket=değer olarak yazılan diğer seçenekleri de içerebilir, örneğin: • eval = FALSE R kodunu çalıştırmamak için • echo = FALSE parçayı R kaynak kodunu çıktı belgesine yazdırmamak için • warning =FALSE R kodu tarafından üretilen uyarıları yazdırmamak için • message = FALSE R kodu tarafından üretilen hiçbir mesajı yazdırmamak için • include = TRU/FALSE, parça çıktılarının (ör. grafikler) belgeye dahil edilip edilmeyeceği • out.width = ve out.height = … tarzında oluşturma için out.width = “%75” • fig.align = “center” şeklin sayfa boyunca nasıl hizalanacağını ayarlar • fig.show=‘hold’ parçanız birden fazla şekil yazdırıyorsa ve bunların yan yana yazdırılmasını istiyorsanız (out.width = c(“%33”, “%67”) ile eşleştirin. Fig.show =‘asis’, kendilerini oluşturan kodun altında şekilleri göstermek için, ‘hide’ gizlemek için veya ‘animate’.bir animasyonda birden çok şekli birleştirmek için • Bir satırda bir parça başlığı yazılmalıdır • Noktalardan, alt çizgilerden ve boşluklardan kaçınmaya çalışın. Ayırıcıya ihtiyacınız varsa bunun yerine kısa çizgi (hyphens) ( - ) kullanın. Buradan knitr özellikleri hakkında daha fazla bilgi edinin.
Yukarıdaki seçeneklerden bazıları, parçanın sağ üst köşesindeki ayar düğmeleri yapılandırılabilir. Burada, işlenen belgenin kodu, çıktıları ve uyarıları içermesini istediğiniz parçalarını belirtebilirsiniz. Bu, küme parantezleri içinde yazılı tercihler olarak görünecektir, örn. echo=FALSE ‘Yalnızca çıktıyı göster’ istediğinizi belirtir.
Ayrıca her parçanın sağ üst tarafında, kodu bir parça içinde veya tüm kodu önceki parçalarda çalıştırmak için yararlı olan iki ok vardır. Ne yaptıklarını görmek için üzerinde gezinin.
Komut dosyasındaki tüm parçalara uygulanacak genel seçenekleri komut dosyasındaki ilk R kodu parçasında ayarlayabilirsiniz. Örneğin, her kod parçası için yalnızca çıktıların gösterilmesi ve kodun kendisinin gösterilmemesi için, bu komutu R kod parçasına dahil edebilirsiniz:
::opts_chunk$set(echo = FALSE) knitr
Metin İçinde R Kodu
Geri tiklere minimum R kodunu da dahil edebilirsiniz. Geri tikler içinde, koda “r” ve bir boşluk ile başlayın, böylece RStudio, kodu R kodu olarak değerlendireceğini bilir. Aşağıdaki örneğe bakın.
Aşağıdaki örnek, birden çok seviyedeki başlıkları ve madde işaretlerini gösterir, geçerli tarihi çıktı olarak kullanmak için (Sys.Date()) için R kodunu kullanır.
Yukarıdaki örnek basittir (geçerli tarihi gösterir), ancak aynı sintaksı kullanarak daha karmaşık R kodu tarafından üretilen değerleri görüntüleyebilirsiniz (örneğin, bir sütunun min, medyan, maks. değerini hesaplamak gibi). Ayrıca, komut dosyasına daha önce R kodu parçalarında oluşturulmuş R nesnelerini veya değerlerini de entegre edebilirsiniz.
Örnek olarak, aşağıdaki komut dosyası, 18 yaşından küçük vakaların oranını tidyverse işlevlerini kullanarak hesaplar ve 18altı (less18), toplam (total) ve 18altıoran (less18prop) nesnelerini oluşturur. Bu dinamik değer sonraki metne eklenir. Bir word belgesine nasıl çıktı alındığını (örüldüğünü) görüyoruz.
Görseller
Görüntüleri R Markdown’ınıza iki yoldan biriyle dahil edebilirsiniz:
![]("path/to/image.png")
Yukarıdakiler işe yaramazsa, knitr::include_graphics() kullanmayı deneyin.
::include_graphics("path/to/image.png") knitr
(unutmayın, dosya yolunuz buradaki paket kullanılarak yazılabilir)
::include_graphics(here::here("path", "to", "image.png")) knitr
Tablolar
Kısa çizgi ( - ) ve çubuklar ( | ) kullanarak bir tablo oluşturun. Çubukların önündeki/arasındaki kısa çizgi sayısı, metin yazılmaya başlamadan önceki boş karakter sayısını belirtir.
Column 1 |Column 2 |Column 3
---------|----------|--------
Cell A |Cell B |Cell C Cell D |Cell E |Cell F
Yukarıdaki kod aşağıdaki tabloyu oluşturur:
Column 1 | Column 2 | Column 3 |
---|---|---|
Cell A | Cell B | Cell C |
Cell D | Cell E | Cell F |
Sekmeli Bölümler
HTML çıktılarında bölümleri “sekmeler” halinde düzenleyebilirsiniz. Bunun için bir başlıktan sonra gelen küme parantezleri { } içine .tabset’i eklemeniz yeterlidir. Bu başlığın altındaki herhangi bir alt başlık (aynı seviyedeki başka bir başlığa kadar), kullanıcının tıklayabileceği sekmeler olarak görünecektir. Daha fazlasını buradan okuyabilirsiniz.
Sekmelere kendilerine özgü bir görünüm vermek için .tabset’ten sonra ek olarak ‘.tabset-pills’ seçeneği ekleyebilirsiniz. Sekmeli HTML çıktısını görüntülerken, Ctrl+f arama işlevinin gizli sekmeleri değil, yalnızca “etkin” sekmeleri arayacağını unutmayın.
40.4 Dosya yapısı
R Markdown’unuzu ve ilişkili R komut dosyalarını yapılandırmanın birkaç yolu vardır. Her birinin avantajları ve dezavantajları vardır:
• Kendine yeten R Markdown - rapor için gereken her şey R Markdown içinde içe aktarılır veya oluşturulur • Diğer dosyaları kaynak olarak kullanma - source() komutuyla harici R komut dosyalarını çalıştırabilir ve çıktılarını Rmd’de kullanabilirsiniz. • Alt komut dosyaları - source() için alternatif bir mekanizma • Bir “runfile” kullanın - R Markdown’ı oluşturmadan önce komutları bir R betiğinde çalıştırın
Kendine yeten Rmd
Nispeten basit bir rapor için, R Markdown komut dosyanızı “kendi kendine yeterli” olacak ve herhangi bir harici komut dosyası içermeyecek şekilde düzenlemeyi seçebilirsiniz.
R markdown’ı çalıştırmak için ihtiyacınız olan her şey, tüm kod parçaları ve paket yüklenmesi dahil olmak üzere, Rmd dosyası içinde gerçekleşir. Bu “kendi kendine yeten” yaklaşım, çok fazla veri işleme yapmanız gerekmediğinde (örneğin, temiz veya yarı temiz bir veri dosyası getirdiğinde) uygundur ve R Markdown’ın oluşturulması çok uzun sürmez.
Bu senaryoda, R Markdown betiğinin bir mantıksal organizasyonu şöyle olabilir: 1. Küresel knitr seçeneklerini ayarlayın 2. Paketleri yükleyin 3. Verileri içe aktarın 4. Veriyi işleyin 5. Çıktılar (tablolar, grafikler, vb.) 6. Varsa çıktıları kaydedin (.csv, .png, vb.)
Diğer dosyaları kaynak olarak kullanma
“Kendi kendine yeterli” yaklaşımın bir varyasyonu, R Markdown kod parçalarının diğer R komut dosyalarını “kaynak” olarak kullanmasıdır (çalıştırma-run). Bu yaklaşım R Markdown betiğinizi daha az karmaşık, daha basit ve organize edilmesi daha kolay hale getirebilir. Son çıktıları raporun başında görüntülemek isterseniz de bu yaklaşım yardımcı olabilir. Bu yaklaşımda, son R Markdown betiği, önceden işlenmiş çıktıları bir belgede birleştirir.
Bunu yapmanın yolu, temel R ‘source()’ fonksiyonuna R komut dosyalarını (dosya yolu ve uzantılı ad) sağlamaktır.
source("your-script.R", local = knitr::knit_global())
# or sys.source("your-script.R", envir = knitr::knit_global())
R Markdown içinde source() kullanılırken, Rmd dosyanızın oluşturulması sırasında harici dosyaların çalışmaya devam edeceğini unutmayın. Bu nedenle, raporu her oluşturduğunuzda komut dosyası çalıştırılır. Bu nedenle, bu source() komutlarının R Markdown içinde olması çalışma sürenizi hızlandırmaz ve hata ayıklamaya büyük ölçüde yardımcı olmaz, çünkü üretilen hata R Markdown üretilirken yazdırılmaya devam eder.
Bir alternatif, child = knitr seçeneğini kullanmaktır.
Farklı R ortamlarının farkında olmalısınız. Bir ortamda oluşturulan nesneler, R Markdown tarafından kullanılan ortamda bulunmayabilir.
Runfile
Bu yaklaşım, R markdown ile beslenen nesneleri önceden işlemek için render() komutlarını içeren R betiğinin kullanılmasını içerir.
Bu yaklaşımla, paketleri yükleyebilir, verileri yükleyebilir ve temizleyebilir ve hatta render()’dan önce ilgilendiğiniz grafikleri oluşturabilirsiniz. Bu adımlar, R komut dosyasında veya kaynaklı diğer komut dosyalarında ortaya çıkabilir. Bu komutlar aynı RStudio oturumunda gerçekleştiği ve nesneler ortama kaydedildiği sürece, nesneler daha sonra Rmd içeriği içinde çağrılabilir. Ardından, R markdown tüm önceden işlenmiş nesnelerle çıktı üretmek için yalnızca son adım için kullanılacaktır. Bu yöntemde bir şeyler ters giderse hata ayıklamak için çok daha kolaydır.
Bu yaklaşım aşağıdaki nedenlerle yararlıdır: • Daha bilgilendirici hata mesajları - bu mesajlar R Markdown’dan değil, R betiğinden oluşturulacaktır. R markdown hataları, hangi parçada sorun olduğunu söyleme eğilimindedir, ancak hangi satırda olduğunu söylemez. • Uygunsa, uzun işleme adımlarını render() komutundan önce çalıştırabilirsiniz (yalnızca bir kez çalışır).
Aşağıdaki örnekte, bir veri nesnesini R ortamında önceden işlediğimiz ve ardından render() kullanarak “create_output.Rmd”yi oluşturduğumuz ayrı bir R betiğine sahibiz.
<- import("datafile.csv") %>% # veriyi yükle ve ortama kaydet
data select(age, hospital, weight) # kısıtlı sütunları seç
::render(input = "create_output.Rmd") # Rmd dosyası oluştur rmarkdown
Dosya yapısı
İş akışı, oluşturulan belgeler ve şekiller için bir “çıktı” klasörüne ve temizlenmiş veriler için “veri” veya “girişler” klasörlerini içeren genel klasör yapısıyla da ilgilidir. Burada daha fazla ayrıntıya girmiyoruz, ancak Rutin raporların düzenlenmesi sayfasına göz atın.
40.5 Belgenin oluşturulması
Belgeyi aşağıdaki şekillerde oluşturabilirsiniz: • RStudio komut dosyası düzenleyicisinin üst kısmındaki “Knit” düğmesine manuel olarak basarak (hızlı ve kolay) • render() komutunu çalıştırın (R Markdown betiğinin dışında yürütülür)
Seçenek 1: “Knit” butonu
Rmd dosyasını açtığınızda, dosyanın üstündeki ‘Knit’ simgesine/düğmesine basın.
R Studio, ilerlemeyi R konsolunuzun yakınındaki ’R markdown sekmesinde gösterecektir. Belge tamamlandığında otomatik olarak açılır.
Belge, R işaretleme betiğinizle aynı klasöre ve aynı dosya adıyla (uzantı dışında) kaydedilecektir. Bu yaklaşım sürüm kontrolü için ideal değildir (manuel olarak taşınmadıkça her dosya oluşturmada var olan dosyanın üzerine yazılır), çünkü daha sonra dosyayı kendiniz yeniden adlandırmanız gerekebilir (örneğin dosya ismine bir tarih ekleyin).
Bu, rmarkdown’dan render() işlevi için RStudio’nun kısayol düğmesidir. Bu yaklaşım, yalnızca gerekli tüm bileşenlerin bulunduğu veya dosya içinden kaynaklandığı kendi kendine yeten bir R markdown ile uyumludur.
Seçenek 2: render()
komutu
R Markdown çıktınızı üretmenin başka bir yolu da render() işlevini çalıştırmaktır (rmarkdown paketinden). Bu komutu R Markdown betiğinin dışında yürütmelisiniz - yani ya ayrı bir R betiğinde (genellikle “run dosyası” olarak adlandırılır) ya da R Konsolunda bağımsız bir komut olarak.
::render(input = "my_report.Rmd") rmarkdown
“knit” ile olduğu gibi, varsayılan ayarlar Rmd çıktısını aynı dosya adıyla (dosya uzantısı dışında) Rmd komut dosyasıyla aynı klasöre kaydeder. Örneğin “my_report.Rmd” örüldüğünde bir word belgesine örüyorsanız “my_report.docx” dosyasını oluşturacaktır. Ancak render() kullanarak farklı ayarlar kullanma seçeneğiniz vardır. render() aşağıdaki argümanları kabul eder:
• output_format = Bu, dönüştürülecek çıktı biçimidir (ör. “html_document”, “pdf_document”, “word_document” veya “all”). Bunu, R Markdown betiği içindeki YAML’de de belirtebilirsiniz. • output_file = Bu, çıktı dosyasının (ve dosya yolunun) adıdır. Bu, aşağıda gösterildiği gibi here() veya str_glue() gibi R işlevleri aracılığıyla oluşturulabilir. • output_dir = Bu, dosyayı kaydetmek için bir çıktı dizinidir (klasör). Bu, Rmd dosyasının kaydedildiği dizinden başka bir alternatif seçmenize olanak tanır. • output_options = YAML komut dosyasındakileri geçersiz kılacak bir seçenekler listesi elde edebilirsiniz (ör. ) • output_yaml = YAML özelliklerini içeren bir .yml dosyasının yolağını sağlayabilirsiniz • params = Aşağıdaki parametrelerle ilgili bölüme bakın • Tam listeye buradan bakın
Bir örnek olarak, sürüm kontrolünü iyileştirmek için aşağıdaki komut, çıktı dosyasını dosya adı ve geçerli tarihle birlikte bir “çıktılar” alt klasörüne kaydeder. Dosya adını oluşturmak için, stringr paketindeki str_glue() fonkisyonu, statik dizelerle (açıkça yazılır) dinamik R kodunu (kıvrımlı parantezler içinde yazılır) birbirine ‘yapıştırmak’ için kullanılır. Örneğin 10 Nisan 2021 ise dosya adı “Report_2021-04-10.docx” olacaktır. str_glue() hakkında daha fazla ayrıntı için Karakterler ve dizeler sayfasına bakın.
::render(
rmarkdowninput = "create_output.Rmd",
output_file = stringr::str_glue("outputs/Report_{Sys.Date()}.docx"))
Dosya işlenirken, RStudio Konsolu size %100’e kadar işlemeninm ilerlemesini ve işlemenin tamamlandığını belirten son bir mesaj gösterecektir.
Seçenek 3: reportfactory paketi
R reportfactory paketi, raporları rutin olarak çalıştırdığınız senaryolara göre (örneğin günlük, haftalık…) R Markdown raporlarını düzenlemek ve derlemek için alternatif bir yöntem sunar. Birden çok R Markdown dosyasının derlenmesini ve çıktılarının organizasyonunu kolaylaştırır. Özünde, R Markdown raporlarını çalıştırabileceğiniz, çıktılar için otomatik olarak tarih ve zaman damgalı klasörler oluşturabileceğiniz ve “hafif” sürüm kontrolüne sahip olabileceğiniz bir “fabrika” sağlar.
Rutin raporları organize etme sayfasında bu iş akışı hakkında daha fazla bilgi edinebilirsiniz.
40.6 Parametreli Raporlar
Belirli bir ayarla (örneğin belirli bir tarih veya yer veya belirli örgü seçenekleriyle) çalıştırılabilmesi için bir raporu dinamik hale getirmek için parametreleştirmeyi kullanabilirsiniz. Aşağıda, temel bilgilere odaklanıyoruz, ancak parametreli raporlar hakkında çevrimiçi olarak daha fazla bilgi bulabilirsiniz.
Ebola vaka listesini örnek olarak kullanarak, her hastane için her gün standart bir gözetim raporu oluşturmak istediğimizi varsayalım. Bunun parametreleri kullanarak nasıl yapılabileceğini gösteriyoruz.
Önemli: Bitişik bir R komut dosyasında basit R nesneleri kullanarak resmi parametre yapısı (params) olmadan da dinamik raporlar oluşturmak mümkündür. Bu durum, bu bölümün sonunda açıklanmıştır.
Parametrelerin ayarlanması
R Markdown çıktınız için parametre değerleri belirlemek için birkaç seçeneğiniz vardır.
Seçenek 1: YAML içinde parametrelerin ayarlanması
Tanımlamak istediğiniz her parametre için girintili ifadeler içeren bir params: seçeneği eklemek için YAML’yi düzenleyin. Bu örnekte, değerlerini belirttiğimiz tarih ve hastane parametrelerini oluşturuyoruz. Bu değerler, rapor her çalıştırıldığında değişebilir. Çıktıyı üretmek için “Knit” düğmesini kullanırsanız, parametreler bu varsayılan değerlere sahip olacaktır. Benzer şekilde, render() komutunu kullanırsanız, render() komutunda aksi belirtilmedikçe parametreler bu varsayılan değerlere sahip olacaktır.
---
title: Surveillance report
output: html_document
params:
date: 2021-04-10
hospital: Central Hospital
---
Arka planda, bu parametre değerleri, params adı verilen salt okunur bir listede bulunur. Böylece, ortamınızdaki başka bir R nesnesi/değeri gibi parametre değerlerini R koduna ekleyebilirsiniz. Params$ yazıp ardından parametre adını yazmanız yeterlidir. Örneğin, hastane adını temsil etmek için params$hospital (varsayılan olarak “Merkez Hastane- Central Hospital”).
Parametrelerin doğru veya yanlış değerleri de tutabileceğini ve bu nedenle bunların bir R kod parçası için knitr seçeneklerinize dahil edilebileceğini unutmayın. Örneğin, {r, eval=FALSE} yerine {r, eval=params$run} ayarını yapabilirsiniz, bu durumda kod parçasının çalışıp çalışmaması parametre çalıştırma: değerine bağlıdır.
Tarih olan parametrelerin bir dize olarak girileceğini unutmayın. Bu nedenle, params$date’in R kodunda yorumlanması için muhtemelen Date sınıfına dönüştürmek için as.Date() veya benzer bir fonksiyonla sarılması gerekir.
Seçenek 2: Parametrelerin render()
ile ayarlanması
Yukarıda bahsedildiği gibi, çıktı üretmek için “Ör-Knit” düğmesine basmaya alternatif olarak, ayrı bir komut dosyasından render() fonksiyonunu yürütmektir. Bu durumda, bu fonksiyonda kullanılacak parametreleri render()’ın params = argümanında belirtebilirsiniz.
Burada sağlanan herhangi bir parametre değerinin, YAML içinde yazılan varsayılan değerlerin üzerine yazılacağını unutmayın. Değerleri tırnak içinde yazıyoruz çünkü karakter/string değerleri olarak tanımlanmaları gerekiyor.
Aşağıdaki komut, “surveillance_report.Rmd” dosyasını işler; dinamik bir çıktı dosyası adı ve klasörü belirtir. Ayrıca params = argümanına iki parametre sağlayan bir list() içerir.
::render(
rmarkdowninput = "surveillance_report.Rmd",
output_file = stringr::str_glue("outputs/Report_{Sys.Date()}.docx"),
params = list(date = "2021-04-10", hospital = "Central Hospital"))
Seçenek 3: Bir Görsel Kullanıcı Arayüzü kullanarak parametreleri ayarlayın
Daha iyi etkileşim için, parametreler için değerleri manuel olarak seçebildiğiniz Grafik Kullanıcı Arayüzü’nü (GUI) da kullanabilirsiniz. Bunu yapmak için ‘Ör-Knit’ düğmesinin yanındaki açılır menüyü tıklayıp ’Parametrelerle ör- Knit with parameters’i seçebiliriz.
Belgenin YAML’sinde oluşturulan parametreler için değerleri yazmanıza izin veren bir açılır pencere görünecektir.
Aynı sonucu, aşağıda gösterildiği gibi params = “ask” argümanını belirterek bir render() komutuyla da elde edebilirsiniz.
::render(
rmarkdowninput = "surveillance_report.Rmd",
output_file = stringr::str_glue("outputs/Report_{Sys.Date()}.docx"),
params = “ask”)
Ancak bu açılır pencereye değerlerin girilmesi hata ve yazım hatalarına tabidir. Açılır menülerden girilebilecek değerlere kısıtlamalar eklemeyi tercih edebilirsiniz. Bunu, her bir parametre için YAML’ye birkaç belirtim ekleyerek yapabilirsiniz params: entry
- label: söz konusu açılır menünün başlığı
- value: varsayılan (başlangıç) değerdir
- input: açılır menü için select şekilde ayarlayın
- choices: Açılır menüden uygun değerleri verin
Aşağıda hastane parametresi için bu özellikler yazılmıştır.
---
title: Surveillance report
output: html_document
params:
date: 2021-04-10
hospital:
label: “Town:”
value: Central Hospital
input: select
choices: [Central Hospital, Military Hospital, Port Hospital, St. Mark's Maternity Hospital (SMMH)]
---
Örürken (‘parametrelerle ör(Knit)’ düğmesi aracılığıyla veya render() yoluyla), açılır pencerede seçim yapabileceğiniz seçenekler bulunur.
Parametreli örnek
Aşağıdaki kod, R Markdown’da sırasıyla params\(date ve params\)hospital olarak kullanılan tarih ve hastane için parametreler oluşturur.
Ortaya çıkan rapor çıktısında, verilerin belirli bir hastaneye nasıl filtrelendiğini ve grafik başlığının doğru hastane ve tarihi ifade ettiğini görün. Burada “linelist_cleaned.rds” dosyasını kullanıyoruz, ancak satır listesinin parametreli tarihle uyumlu olması için bir tarih damgası olması uygun olacaktır.
Örme işlemi sonrası, varsayılan yazı tipi ve düzen ile son çıktı üretilir.
params
olmadan parametreli hale getirme
Ayrı bir komut dosyasından render() ile bir R Markdown dosyası oluşturuyorsanız, params: kullanmadan parametreleştirmenin etkisini yaratabilirsiniz.
Örneğin, render() komutunu içeren R betiğinde, render() komutundan önce hastane ve tarihi iki R nesnesi (değeri) olarak basitçe tanımlayabilirsiniz. R Markdown’da, YAML’de bir params: bölümüne sahip olmanız gerekmez ve params\(date yerine tarih nesnesine ve params\)hospital yerine hastaneye başvururuz.
# Bu, R Markdown'dan ayrı bir R betiğidir.
# R nesnelerini tanımlayın
<- "Central Hospital"
hospital <- "2021-04-10"
date
# R markdown oluşturun
::render(input = "create_output.Rmd") rmarkdown
Bu yaklaşımı takip etmek, “parametrelerle öremeyeceğiniz”, GUI’yi kullanamayacağınız veya parametreler içinde örgü seçeneklerini ekleyemeyeceğiniz anlamına gelir. Bununla birlikte, avantajlı olabilecek daha basit koda izin verir.
40.7 Döngülü raporlar
Her yetki alanı/birim için bir rapor üretmek için girdi parametrelerini değiştirerek bir raporu birden çok kez çalıştırmak isteyebiliriz. Bu, yineleme, döngü ve listeler sayfasında ayrıntılı olarak açıklanan yineleme araçları kullanılarak yapılabilir. Seçenekler, purrr paketini veya aşağıda açıklandığı gibi bir for döngüsünün kullanımını içerir.
Aşağıda, ilgili tüm hastaneler için bir gözetim raporu oluşturmak için basit bir for döngüsü kullanıyoruz. Bu, tek bir komutla yapılır (hastane parametresini hastaneler için birer birer manuel olarak değiştirmek yerine). Raporları işleme komutu, Rmd raporunun dışında ayrı bir komut dosyasında bulunmalıdır. Bu komut dosyası aynı zamanda “dönüştürülecek” tanımlanmış nesneleri - bugünün tarihini ve döngünün uygulanacağı hastane adları vektörünü içerecektir.
<- c("Central Hospital",
hospitals "Military Hospital",
"Port Hospital",
"St. Mark's Maternity Hospital (SMMH)")
Daha sonra, hastane vektöründeki her değer için komut çalıştıran bir döngü kullanarak bu değerlere render() fonksiyonunu uygularız. i harfi, yinelemede kullanılmakta olan hastanenin dizin konumunu (1 ila 4) temsil eder, öyle ki hospital_list[1] “Merkez Hastane” olur. Bu bilgi, render() komutunda iki yerde sağlanır:
Dosya adında. 10 Nisan 2021’de oluşturulan ilk yinelemenin dosya adı, çalışma dizininin ‘çıktı’ alt klasörüne kaydedilen “Report_Central Hospital_2021-04-10.docx” olacak şekilde belirlenmiştir.
params = argümanına. Rmd, params$hospital değeri çağrıldığında dahili olarak hastane adını kullanır (veri setini yalnızca belirli bir hastaneye filtrelemek amacıyla). Bu örnekte, her hastane için bir tane olmak üzere dört dosya oluşturulacaktır.
for(i in 1:length(hospitals)){
::render(
rmarkdowninput = "surveillance_report.Rmd",
output_file = str_glue("output/Report_{hospitals[i]}_{Sys.Date()}.docx"),
params = list(hospital = hospitals[i]))
}
40.8 Şablonlar
İstediğiniz biçimlendirmeyi içeren bir şablon belge kullanarak, Rmd çıktısının nasıl görüneceğinin estetiğini ayarlayabilirsiniz. Örneğin, istenen boyutlara, filigranlara (watermark), arka planlara ve yazı tiplerine sahip sayfaları/slaytları içeren bir MS Word veya Powerpoint dosyası oluşturabilirsiniz.
Word belgeleri
Bir şablon oluşturmak için, yeni bir kelime word başlatın (veya size uygun formatta mevcut bir çıktıyı kullanın) ve stilleri tanımlayarak yazı tiplerini düzenleyin. Stillerde, Başlık 1, 2 ve 3 çeşitli markdown başlık seviyelerine atıfta bulunur (sırasıyla # Başlık 1, ## Başlık 2 ve ### Başlık 3). Paragrafın yanı sıra yazı tipi biçimlendirmesini de değiştirmek için stile sağ tıklayın ve ’değiştir’e tıklayın (örneğin, boşluk bırakmaya yardımcı olabilecek belirli stillerden önce sayfa ayrımları ekleyebilirsiniz). Kenar boşlukları, sayfa boyutu, başlıklar vb. gibi Word belgesinin diğer ayarları, üzerinde çalıştığınız normal bir kelime belgesi gibi doğrudan değiştirilebilir.
Powerpoint belgeleri
Yukarıdaki gibi, yeni bir slayt seti oluşturun veya istenen formatta mevcut bir powerpoint dosyasını kullanın. Daha fazla düzenleme için, ‘Görünüm’ ve ‘Asıl Slaytın’ üzerine tıklayın. Buradan, metin kutularındaki metin biçimlendirmesini ve ayrıca genel sayfa için arka plan/sayfa boyutlarını düzenleyerek “ana” slayt görünümünü değiştirebilirsiniz.
Ne yazık ki, powerpoint dosyalarını düzenlemek biraz daha az esnektir: • Birinci düzey başlık (# Başlık 1) otomatik olarak yeni bir slaydın başlığı olur, • Bir ## Başlık 2 metni altyazı olarak değil, slaydın ana metin kutusundaki metin olarak görünecektir (Ana görünümü değiştirmenin bir yolunu bulamazsanız). • Çıktı alınan grafikler ve tablolar otomatik olarak yeni slaytlara geçecektir. Bunları birleştirmeniz gerekecektir, örneğin ggplot’ları birleştirmek için patchwork fonksiyonu, aynı sayfada görünmelerini sağlar. Birden çok görüntüyü tek bir slayta yerleştirmek için patchwork paketini kullanma hakkında [blog post] (https://mattherman.info/blog/ppt-patchwork/) gönderisine bakın. Powerpoint sunumlarıyla daha derinlemesine çalışacak bir araç için officer paketine officer package bakın.
Şablonların YAML’e entegrasyonu
Bir şablon hazırlandıktan sonra, ilgili detaylar Rmd’nin YAML’sine ‘çıktı’ satırının altına ve belge tipinin belirtildiği yerin altına (ayrı bir satır olarak) eklenebilir. Not referans_doc, powerpoint slayt şablonları için kullanılabilir.
Şablonu Rmd dosyasının bulunduğu klasöre (aşağıdaki örnekte olduğu gibi) veya içindeki bir alt klasöre kaydetmek en kolay yoldur.
---
title: Surveillance report
output:
word_document:
reference_docx: "template.docx"
params:
date: 2021-04-10
hospital: Central Hospital
template:
---
HTML dosyalarının formatlanması
HTML dosyaları şablon kullanmaz, ancak YAML içinde yapılandırılmış stiller içerebilir. HTML’ler etkileşimli ve esnek belgelerdir. Burada bazı temel seçenekleri ele alıyoruz.
• Table of contents-İçindekiler): Aşağıda toc: true ile bir içindekiler tablosu ekleyebilir ve ayrıca toc_float: true ile siz kaydırdıkça görüntülenebilir formda olmasını (“kayan-floats”) belirtebiliriz.
• Themes-Temalar: Bootswatch tema kitaplığından gelen önceden hazırlanmış bazı temalara başvurabiliriz. Aşağıdaki örnekte cerulean kullanıyoruz. Diğer seçenekler şunlardır: ournal, flatly, darkly, readable, spacelab, united, cosmo, lumen, paper, sandstone, simplex ve yeti.
• Highlight-Vurgula: Bu seçeneği yapılandırmak, vurgulanan metnin görünümünü değiştirir (örneğin, kod parçaları). Desteklenen stiller arasında default, tango, pygments, kate, monochrome, espresso, zenburn, haddock, breezedark ve textmate. bulunur.
Yukarıdaki seçeneklerin YAML’ye nasıl entegre edileceğine dair bir örnek.
---
title: "HTML example"
output:
html_document:
toc: true
toc_float: true
theme: cerulean
highlight: kate
---
Aşağıda, her ikisi de kayan formda içindekiler tablolarına sahip, ancak farklı tema ve vurgulama stilleri seçilen iki HTML çıktısı örneği verilmiştir:
40.9 Dinamik içerik
Bir HTML çıktısında, rapor içeriğiniz dinamik olabilir. Aşağıda bazı örnekler verilmiştir:
Tablolar
Bir HTML raporunda, içeriğin dinamik olması için filtreler ve kaydırma çubukları ile veri çerçevesi / tibble yazdırabilirsiniz. Bu özelliği sunan birkaç paket mevcuttur.
Bunu DT paketiyle yapmak için, bu el kitabında kullanıldığı gibi, şöyle bir kod parçası ekleyebilirsiniz:
datatable() fonksiyonu, sağlanan veri çerçevesini okuyucu için dinamik bir tablo olarak yazdıracaktır. Tablonun en sol tarafını basitleştirmek için satır adları için rownames = argümanını FALSE-YANLIŞ olarak ayarlayabilirsiniz. filter = “top”, her sütun üzerinde bir filtre sağlar. option() fonksiyonunun argümanlar kısmına diğer özelliklerin bir listesini girin. Aşağıda iki tane argüman yer almaktadır: pageLength = 5, görünen satır sayısını 5 olarak ayarlar (kalan satırlar oklar arasında gezinerek görüntülenebilir) ve scrollX=TRUE tablonun altında bir kaydırma çubuğu etkinleştirir (sağa çok fazla uzanan sütunlar için).
Veri setiniz çok büyükse, veri çerçevesini head() içine sararak yalnızca en üstteki X sayıdaki satırları görüntülemeyi düşünün.
HTML araçları
HTML widgets for R R için HTML widget’ları, JavaScript kitaplıklarını kullanarak artırılmış etkileşim sağlayan özel bir R paketleri sınıfıdır. Bu paketleri HTML R Markdown çıktılarına gömebilirsiniz.
Bu widget’ların bazı yaygın örnekleri şunları içerir:
• Plotly (bu el kitabı sayfasında ve [İnteraktif grafikler] sayfasında kullanılır) • visNetwork (bu el kitabının İletim Zincirleri sayfasında kullanılır) • Leaflet (bu el kitabının GIS Temelleri sayfasında kullanılır) • dygraphs (zaman serisi verilerini etkileşimli olarak göstermek için kullanılır) • DT (datatable()) (filtre, sıralama vb. ile dinamik tabloları göstermek için kullanılır)
Plotly’den ggplotly() fonksiyonunun kullanımı özellikle kolaydır. Etkileşimli grafikler sayfasına bakın.
40.10 Kaynaklar
Daha fazla bilgi şuralarda bulunabilir:
- https://bookdown.org/yihui/rmarkdown/
- https://rmarkdown.rstudio.com/articles_intro.html
• Markdown vs knitr vs R markdown’ın için iyi bir açıklama: https://stackoverflow.com/questions/40563479/relationship-between-r-markdown-knitr-pandoc-and-bookdown