29 R Markdown formatları

29.1 Giriş

Şimdiye kadar HTML belgeleri üretmek için kullanılan R Markdown kısımlarını gördünüz. Bu bölüm, R Markdown ile üretebileceğiniz diğer birçok çıktı türünden bazılarına kısa bir genel bakış sunar. Bir belgenin çıktısını ayarlamanın iki yolu vardır:

  1. Kalıcı olarak YAML başlığını değiştirerek:

    title: "Viridis Demo"
    output: html_document
  2. Geçici olarak rmarkdown::render() öğesini çağırarak:

    rmarkdown::render("diamond-sizes.Rmd", output_format = "word_document")

    Bu, özellikle programlı olarak birden çok çıktı türü üretmek istiyorsanız kullanışlıdır.

RStudio’nun knit butonu bir dosyayı output (çıktı) alanında listelenen ilk format neyse onunla işler. Knit butonunun yanındaki açılır menüyü kullanarak ek biçimlerde oluşturabilirsiniz.

29.2 Çıktı seçenekleri

Her çıktı biçimi bir R fonksiyonu ile ilişkilidir. foo ya da pkg::foo yazabilirsiniz. Eğer pkg’yi atlarsanız, varsayılan kurulum aracı rmarkdown olur. Çıktıyı yapan fonksiyonun adını bilmek önemlidir çünkü buradan yardım alabilirsiniz. Çıktıyı oluşturan fonksiyonun adını bilmek önemlidir çünkü buradan yardım alırsınız. Örneğin, html_document ile hangi parametreleri ayarlayabileceğinizi anlamak için ?rmarkdown::html_document dosyasına bakın.

Varsayılan parametre değerlerini geçersiz kılmak için genişletilmiş bir output (çıktı) alanı kullanmanız gerekir. Örneğin, bir içindekiler tablosu içeren bir html_document oluşturmak istiyorsanız, şunları kullanırsınız:

output:
  html_document:
    toc: true
    toc_float: true

Hatta bir format listesi sağlayarak birden çok çıktıya dönüştürebilirsiniz:

output:
  html_document:
    toc: true
    toc_float: true
  pdf_document: default

Varsayılan seçeneklerden herhangi birini geçersiz kılmak istemiyorsanız kullandığınız argümanlara dikkat edin.

29.3 Dökümanlar

Önceki bölüm varsayılan ayarlar ile html_document çıktısına odaklanmıştı. Bu alanda farklı türde belgeler oluşturan bir dizi temel seçenek vardır:

  • pdf_document önceden yüklenmesi gereken LaTeX (açık kaynaklı bir belge düzeni sistemi) ile bir PDF oluşturur. LaTeX’e sahip değilseniz, RStudio zaten size soracaktır.

  • word_document Microsoft Word dosyaları icin (.docx) kullanılır.

  • odt_document OpenDocument Metin dosyaları icin (.odt) kullanılır.

  • rtf_document Rich Text Format (.rtf) dosyaları için

  • md_document bir Markdown dosyası için kullanılır. Bu genellikle tek başına kullanışlı değildir, ancak örneğin kurumsal CMS’niz veya laboratuvar wiki’niz markdown kullanıyorsa çalıştırabilirsiniz.

  • github_document GitHub’da paylaşmak için tasarlanmıştır. Uyarlanmış bir md_document versiyonu vardır.

Karar vericilerle paylaşmak üzere bir belge oluştururken, kurulum bölümünde genel seçenekleri ayarlayarak varsayılan kod görüntüsünü kapatabileceğinizi unutmayın:

knitr::opts_chunk$set(echo = FALSE)

html_document dosyaları için başka bir seçenek de kod parçalarını varsayılan olarak gizli, ancak tek tıklama ile görünür kılmaktır:

output:
  html_document:
    code_folding: hide

29.4 Not defterleri

Not defteri olan html_notebook, html_document ilişkili bir tür dosyadır. İşlenen çıktılar çok benzer, ancak amaçları farklıdır. Bir html_document karar vericilerle iletişim kurmaya odaklanırken, bir not defteri diğer veri bilimcilerle iş birliği yapmaya odaklanır. Bu farklı amaçlar, HTML çıktısının farklı şekillerde kullanılmasına yönlendirir. Her iki HTML çıktısı da tüm oluşturulmuş çıktıyı içerecektir, ancak not defteri ayrıca tam kaynak kodunu da içerir. Bu, not defteri tarafından oluşturulan .nb.html dosyasını iki şekilde kullanabileceğiniz anlamına gelir:

  1. Bir web tarayıcısında görüntüleyebilir ve oluşturulan çıktıyı görebilirsiniz. html_document türünden farklı olarak her zaman onu oluşturan kaynak kodun gömülü bir kopyasını içerir.

  2. RStudio’da düzenleyebilirsiniz. Bir .nb.html dosyasını açtığınızda, RStudio onu oluşturan .Rmd dosyasını otomatik olarak yeniden oluşturacaktır. Gelecekte, gerektiğinde otomatik olarak ayıklanacak olan destekleyici dosyaları da (örn; .csv veri dosyaları) dahil edebilirsiniz.

.nb.html dosyalarını e-postayla göndermek, analizlerinizi iş arkadaşlarınızla paylaşmanın kolay bir yoludur. Ancak, değişiklik yapmak istedikleri anda işler zorlaşabilir. Bunu yaşarsanız Git ve GitHub’ı öğrenmenin zamanı gelmiştir. Git ve GitHub’ı öğrenmek ilk başta kesinlikle acı vericidir, ancak iş birliği getirisi çok büyüktür. Daha önce belirtildiği gibi Git ve GitHub bu kitabın kapsamı dışında ancak bunları zaten kullanıyorsanız işinize yarayacak bir ipucu var: Hem html_notebook hem de github_document çıktılarını birlikte kullanın:

output:
  html_notebook: default
  github_document: default

html_notebook size yerel bir ön izleme ve e-posta yoluyla paylaşabileceğiniz bir dosya sunar. github_document ise Git’te kontrol edebileceğiniz minimal bir md dosyası oluşturur. Bununla analizinizin (sadece kodun değil) sonuçlarının zaman içinde nasıl değiştiğini kolayca görebilirsiniz. Ayrıca GitHub çıktıyı sizin için çevrimiçi olarak güzel bir şekilde oluşturacaktır.

29.5 Sunumlar

R Markdown’ı sunum oluşturmak için de kullanabilirsiniz. Keynote veya PowerPoint gibi bir araca göre daha az görsel kontrole sahip olursunuz fakat R kodunuzun sonuçlarını bir sunuma otomatik olarak eklemek size uzun zaman kazandırabilir. Sunumlar, içeriğinizi her birinci (#) veya ikinci (##) düzey başlığında başlayan yeni bir slaytla slaytlara bölerek çalışır. Başlıksız yeni bir slayt oluşturmak için yatay bir (***) kuralı da ekleyebilirsiniz.

R Markdown, yerleşik üç sunum biçimiyle birlikte gelir:

  1. ioslides_presentation - ioslides ile HTML sunumu

  2. slidy_presentation - W3C Slidy ile HTML sunumu

  3. beamer_presentation - LaTeX Beamer ile PDF sunumu

Paketler tarafından sağlanan diğer iki popüler format ise:

  1. revealjs::revealjs_presentation - HTML sunumu, revealjs gerektirir.

  2. rmdshower, https://github.com/MangoTheCat/rmdshower, shower etrafında bir çerçeve sağlar, shower bir sunum aracıdır. https://github.com/shower/shower

29.6 Panolar

Gösterge tabloları büyük miktarda veri bilgisini görsel ve hızlı bir şekilde iletmenin kullanışlı bir yoludur. Flexdashboard paketi R Markdown ile başlıkların düzeni nasıl etkilediğine ilişkin bir aracı kullanarak gösterge panoları oluşturmayı özellikle kolaylaştırır:

  • Her 1. düzey başlık (#), gösterge tablosunda yeni bir sayfa başlatır.
  • Her 2. düzey başlık (##) yeni bir sütun başlatır.
  • Her 3. düzey başlık (###) yeni bir satır başlatır.

Örneğin aşağıdaki bu panoyu oluşturabilirsiniz:

Bu kodu kullanarak:

---
title: "Diamonds distribution dashboard"
output: flexdashboard::flex_dashboard
---

```{r setup, include = FALSE}
library(ggplot2)
library(dplyr)
knitr::opts_chunk$set(fig.width = 5, fig.asp = 1/3)
```

## Column 1

### Carat

```{r}
ggplot(diamonds, aes(carat)) + geom_histogram(binwidth = 0.1)
```

### Cut

```{r}
ggplot(diamonds, aes(cut)) + geom_bar()
```

### Colour

```{r}
ggplot(diamonds, aes(color)) + geom_bar()
```

## Column 2

### The largest diamonds

```{r}
diamonds %>% 
  arrange(desc(carat)) %>% 
  head(100) %>% 
  select(carat, cut, color, price) %>% 
  DT::datatable()
```

Flexdashboard ayrıca kenar çubukları, sekme seti, değer kutuları ve göstergeler oluşturmak için basit araçlar sağlar. Flexdashboard hakkında daha fazla bilgi edinmek için http://rmarkdown.rstudio.com/flexdashboard/ adresini ziyaret edin.

29.7 Etkileşim

Herhangi bir HTML biçimi (belge, not defteri, sunum veya pano) etkileşimli bileşenler içerebilir.

29.7.1 htmlwidgets

HTML etkileşimli bir biçimdir ve bir R fonksiyonu olan etkileşimli HTML görselleştirmeleri üreten htmlwidgets’dan yararlanabilirsiniz. Örneğin, aşağıdaki broşür haritasını deneyin. Bu sayfayı web’de görüntülüyorsanız, haritayı sürükleyebilir, yakınlaştırabilir ve uzaklaştırabilirsiniz, vb. Bunu bir kitapta doğal olarak yapamayacağınız için rmarkdown size otomatik olarak statik bir ekran görüntüsü ekler.

library(leaflet)
leaflet() %>%
  setView(174.764, -36.877, zoom = 16) %>% 
  addTiles() %>%
  addMarkers(174.764, -36.877, popup = "Maungawhau") 

Htmlwidget’ların en güzel yanı onları kullanmak için HTML veya JavaScript hakkında hiçbir şey bilmenize gerek olmamasıdır. Tüm detaylar paketin içinde bulunur, bu yüzden endişelenmenize gerek yoktur.

Aşağıdakiler dahil htmlwidget’ları sağlayan birçok paket vardır:

Html widget’ları hakkında daha fazla bilgi edinmek ve bunları sağlayan paketlerin daha eksiksiz bir listesini görmek için: http://www.htmlwidgets.org/.

29.7.2 Shiny

htmlwidget’lar kullanıcı taraflı etkileşim sağlar, tüm etkileşim R’dan bağımsız olarak tarayıcıda gerçekleşir. Bu harikadır çünkü HTML dosyasını R ile herhangi bir bağlantı olmadan dağıtabilirsiniz. Ancak bu HTML ve JavaScript’te yapabileceğiniz şeyleri sınırlar. Alternatif bir yaklaşım, JavaScript yerine R kodunu kullanarak etkileşim oluşturmanıza izin veren bir paket olan Shiny’yi kullanmaktır.

Bir R Markdown belgesinden Shiny kodunu çağırmak için başlığa runtime: shiny ekleyin:

title: "Shiny Web App"
output: html_document
runtime: shiny

Ardından, belgeye etkileşimli bileşenler eklemek için “input” girdi işlevlerini kullanabilirsiniz:

library(shiny)

textInput("name", "What is your name?")
numericInput("age", "How old are you?", NA, min = 0, max = 150)

Daha sonra girdi ismi (input$name) ve girdi yaşı (input$age) gibi değerlere başvurabilirsiniz. Bunları kullanan kod her değiştiğinde otomatik olarak yeniden çalıştırılacaktır.

Burada size shiny ile bir uygulama gösteremem çünkü shiny etkileşimleri sunucuda gerçekleşiyor. Bu, JavaScript bilmeden etkileşimli uygulamalar yazabileceğiniz, ancak bunları çalıştırmak için bir sunucuya ihtiyacınız olduğu anlamına gelir. Bu, lojistik bir sorunu ortaya çıkarır: Shiny uygulamalarının çevrimiçi olarak çalıştırılması için bir Shiny sunucusuna ihtiyacı vardır. Kendi bilgisayarınızda Shiny uygulamaları çalıştırdığınızda, shiny sizin için otomatik olarak bir sunucu kurar, ancak bu tür bir etkileşimi çevrimiçi yayınlamak istiyorsanız herkese açık bir Shiny sunucusuna ihtiyacınız vardır. Shiny kullanmanın temel risk getiri dengesi budur: bir Shiny belgesinde R’da yapabileceğiniz her şeyi yapabilirsiniz, ancak birinin R’ı çalıştırması gerekir.

Shiny ile ilgili diğer ayrıntılar için http://shiny.rstudio.com/.

29.8 Web siteleri

Biraz altyapı eklemesi ile eksiksiz bir web sitesi oluşturmak için R Markdown’ı kullanabilirsiniz:

  • .Rmd dosyalarınızı tek bir dizine koyun. Ana sayfa index.Rmd olacaktır.

Örneğin;

```
name: "my-website"
navbar:
  title: "My Website"
  left:
    - text: "Home"
      href: index.html
    - text: "Viridis Colors"
      href: 1-example.html
    - text: "Terrain Colors"
      href: 3-inline.html
```

Bağımsız bir statik web sitesi olmaya hazır bir dosya dizini olan _site oluşturmak için, veya web siteniz için bir RStudio Projesine sahipseniz, rmarkdown::render_site() ile yürütün. RStudio, sitenizi oluşturmak ve ön izlemek için kullanabileceğiniz IDE’ye sekme ekleyecektir.

Daha fazlası için: http://rmarkdown.rstudio.com/rmarkdown_websites.html.

29.9 Diğer formatlar

Paketler daha da fazla çıktı seçeneği sunar.:

Daha fazla format listesi için http://rmarkdown.rstudio.com/formats.html adresine bakın. Ayrıca http://rmarkdown.rstudio.com/developer_custom_formats.html adresindeki talimatları izleyerek kendiniz de oluşturabilirsiniz.

29.10 Daha fazlası

Farklı formatlar kullanarak etkili iletişim hakkında daha fazla bilgi edinmek için aşağıdaki kaynakları öneriyorum: