RMarkdown:巧妙地在文件中嵌入程式

RMarkdown:巧妙地在文件中嵌入程式

實用的程式碼區塊(Code chunk)設定

惱人的部分

R For Data Science

在資料科學的專案中,溝通是專案的最後一個項目,呈現的形式包含簡報、儀表板與文件等。雖然它佔用的時間比例低,卻是不可或缺並且具有畫龍點睛效果的一環,其重要性不言可喻。在我還不懂得 pandoc、LaTex 與 markdown 這些好用工具之前,一個分析專案對我而言是零散、不連貫的,需要在試算表、套裝統計軟體中處理資料、作圖與跑模型;在投影片軟體中製作簡報;在文書處理軟體中寫作手冊或文件,撰寫分析報告這件事情對我而言是一個額外的負擔,過程剪剪貼貼的困擾以及不同輸出的格式不說,最令人厭世的是調整程式碼上色(highlight)與縮排(indentation)部分。

這個惱人問題在我開始使用 R Markdown 之後一切都迎刃而解了。

中華一番,Google Search

R Markdown

bookdown.org

Your data tells a story. Tell it with R Markdown. Turn your analyses into high quality documents, reports, presentations and dashboards.

RStudio

簡單說明,R Markdown 的中心思想就是讓資料科學家只要維護一個 .Rmd 檔案就能透過 knitr 套件自由地轉換輸出格式為多種常見的靜態、動態格式,包含 HTML、PDF、MS Word、Beamer、shiny applications 與 websites。

這篇文章我們著重在程式碼部分,來看看 R Markdown 如何搞定這件差事。

喜歡 DataInPoint 的文章嗎?假如很喜歡,可以成為贊助者!

DataInPoint is creating Data Science Tutorials | Patreon

程式碼與一般輸出

```{r}
say_hello <- function(x) {
hello_char <- sprintf("哈囉%s!", x)
return(hello_char)
}
say_hello("世界")
say_hello(" R 語言")
```
```{python}
def say_hello(x):
"""
跟 x 說哈囉!
"""
hello_str = "哈囉{}!".format(x)
return hello_str
print(say_hello("世界"))
print(say_hello(" Python"))
```

程式碼與圖形輸出

```{r}
x_arr <- 1:5
y_arr <- 2 * x_arr
plot(x_arr, y_arr, type = "l", col = "blue")
```
```{python}
import numpy as np
import matplotlib.pyplot as plt
x_arr = np.arange(1, 6)
y_arr = 2 * x_arr
plt.plot(x_arr, y_arr)
plt.show()
```

R Markdown 不只是幫我們搞定程式碼的上色與縮排而已,連一般輸出與圖形輸出也都在掌握之中,接著我們來看一些實用的程式碼區塊設定。

實用的程式碼區塊設定:echo

  • TRUE(預設)
  • FALSE

有時在倉促之下撰寫的程式碼輸出是正確的,但可能不是太漂亮,這時可以設定 {echo=FALSE} 將程式碼隱藏起來,但是還是將輸出結果呈現在分析報告之中。

```{r echo=FALSE}
say_hello <- function(x) {
hello_char <- sprintf("哈囉%s!", x)
return(hello_char)
}
say_hello("世界")
say_hello(" R 語言")
```

實用的程式碼區塊設定:eval

  • TRUE(預設)
  • FALSE

有時我們只想顯示一段程式碼,卻不需要在輸出文件時執行這段程式碼(可能只是一段 Pseudocode),這時可以設定 {eval=FALSE} 。

```{r eval=FALSE}
# 一段自訂函數的 Pseudocode
function_name <- function(x, arg, ...) {
...
output <- ...
return(output)
}
```

實用的程式碼區塊設定:message

  • TRUE(預設)
  • FALSE

有時程式碼的輸出會產生訊息。

```{r}
library(dplyr)
```

假如我們不希望輸出文件包含訊息,可以設定 {message=FALSE} 。

```{r message=FALSE}
library(dplyr)
```

實用的程式碼區塊設定:warning

  • TRUE(預設)
  • FALSE

有時程式碼的輸出會產生警告。

```{r}
as.numeric("Hello R 語言!")
```

假如我們不希望輸出文件包含警告,可以設定 {message=FALSE} 。

```{r warning=FALSE}
as.numeric("Hello R 語言!")
```

實用的程式碼區塊設定:error

  • TRUE
  • FALSE(預設)

程式碼如果出現錯誤時,會無法順利輸出 R Markdown 的文件。

```{r}
"Hello " + "R 語言!"
```

假如我們希望輸出文件要將這個錯誤顯示出來,可以設定 {error=TRUE} 。

實用的程式碼區塊設定:results

  • markup(預設)
  • asis
  • hold
  • hide

程式碼執行的結果輸出有幾種不同樣式,預設的 markup 是有裝飾的樣式。

```{r}
say_hello <- function(x) {
hello_char <- sprintf("哈囉%s!", x)
return(hello_char)
}
say_hello("世界")
say_hello(" R 語言")
```

如果不希望輸出有裝飾,可以調整 {results=’asis’} 。

```{r results='asis'}
say_hello <- function(x) {
hello_char <- sprintf("哈囉%s!", x)
return(hello_char)
}
say_hello("世界")
say_hello(" R 語言")
```

如果不希望顯示輸出的結果,但是這段程式又必須被執行(可能是後面的程式區塊需要使用這段程式產出的物件),可以調整 {results=’hide’} 。

如果希望一段程式區塊的輸出可以一起顯示,可以調整 {results=’hold’} 。

實用的程式碼區塊設定:cache

  • TRUE
  • FALSE(預設)

如果一段程式區塊執行的時間過長(像是載入資料),可以調整 {cache=TRUE} 將該區塊輸出的物件暫存起來,可以避免每一次執行 knit 函數時都要重新執行。

如果您喜歡這篇文章,請多按下方的「拍手」圖像幾次、分享到社群網站、成為我們的贊助者以及訂閱 DataInPoint 的新文章!

DataInPoint is creating Data Science Tutorials | Patreon

延伸閱讀


RMarkdown:巧妙地在文件中嵌入程式 was originally published in DataInPoint on Medium, where people are continuing the conversation by highlighting and responding to this story.

“RMarkdown:巧妙地在文件中嵌入程式” Posted first on ” Programming on Medium “
Author: Yao-Jen Kuo

Author: Pawan Kumar

Leave a Reply

Close Menu
%d bloggers like this:
Skip to toolbar