使用markdown,knitr和pandoc在R語言中編寫可重現的報告
原文連結:http://tecdat.cn/?p=14899
您有了一些程式碼,資料和一個不錯的結果,現在需要與您的協作者(或主管)進行交流了。你該怎麼做?
在本指南中,我們想向您展示如何使用現在提供的一些奇妙,免費的工具和軟體包編寫美觀,可重複的報告。這些工具將幫助您交流科學知識,並希望您再也不會複製和貼上R輸出。
首先,讓我們回顧一下進行良好分析的關鍵組成部分:
- 資料
- 用於分析資料的程式碼
- 程式碼生成的圖表
- 文字,解釋圖形和結果,並描述方法。
這些元素以報告的形式合併在一起。作為科學家,我們寫了許多大小報告。像紙張這樣的大型報告很少見,但是我們一直在編寫較小的報告。這些包括在專案生命週期內編寫的所有初步結果,每週更新,帶有數字的電子郵件以及自己的筆記。傳統上,大多數生物學家會在R中執行階段2和3,然後啟動Word或Powerpoint並複製貼上階段4的所有內容。這是可行的,但是這種方法有一些缺點:
- 浪費大量時間,加上覆制和貼上很爛
- 您的解釋與程式碼分開
- Word不提供語法高亮顯示功能,因此很難讀取以這種方式顯示的程式碼,
- 在版本控制下無法很好地跟蹤Word文件
- 如果不進行所有複製和貼上操作,則無法重新生成報告。
值得慶幸的是,現在有一個更好的方式來寫報告,用包knitr
,並稱之為通用文件轉換程式pandoc。現在還可以將您的解釋(階段4)與R程式碼(階段2)和結果(階段3)結合起來,以生成美觀,獨立且可重複的報告。這些共同為希望節省時間和進行可重複研究的科學家提供了強大的工具集。
為什麼要使用Markdown?
此Markdown的目標是“在可行的情況下儘可能易於閱讀和編寫
html
,rtf
,latex
,或幾乎任何其他標記文字,Markdown是非常具有可讀性。並且由於使用純文字,因此檔案很小,並且可以在各種裝置上輕鬆編輯。
作為科學家,我們不僅撰寫論文,而且還撰寫筆記,程式碼,電子郵件,提醒,待辦事項列表,部落格文章等。不僅如此,我越來越多地使用markdown進行筆記和報告寫作。
因為它是純文字,所以您可以在任何程式中編寫markdown。但是,最好的測試編輯器還允許您以格式化的html格式檢視程式碼。
Markdown文件通常以extension.md
.markdown
。
RMarkdown
Markdown被證明非常有用,以至於許多不同的編碼小組都採用了它,但同時也增加了自己的“風味”。到目前為止,我們瞭解以下內容:
- 原始Markdown
- github風格的markdown,
- PandocMarkdown,以及
- multimarkdown。
這些中的每一個都提供一組稍微不同的功能。
RStudio實現了一種稱為“ RMarkdown”(或RMarkdown)的東西。此外,它包括“程式碼塊”,這些程式碼塊將由R執行。這些程式碼如下所示:
- ```{r}
- mean(1:10) # or some other code
- ```
產生:
- ```
- mean(1:10) # or some other code
- ```
- ```
- ## [1] 5.5
- ```
Markdown會像這樣渲染:
mean(1:10) # or some other code
## [1] 5.5
R markdown在Rstudio中使用,並允許將R程式碼與文字段一起編入。以R markdown編寫的檔案具有副檔名.Rmd
。
將R markdown視為可以編譯為上述markdown變體之一的東西 。
knitr
報告
該knitr
軟體包的編寫是在單個文件中結合了RMarkdown和R程式碼的元素 。從一個例子開始。
開啟Rstudio並安裝Knitr軟體包
install.packages(knitr)
然後開啟此演示檔案並單擊knit HTML
按鈕
該檔案是用RMarkdown編寫的,包括一些文字和程式碼。
點選可以knit HTML
做幾件事
- 它執行檔案中的所有程式碼
- 它會生成一個markdown檔案,包括原始文件的位及其輸出。
- 它將markdown文件轉換為html。
您還可以使用以下命令從控制檯製作文件:
- library(knitr)
- library(markdown)
- knit("example.Rmd") # produces the md file
- markdownToHTML("example.md", "example.html") # converts an md file to html
注意,要使此程式碼正常工作,示例檔案必須位於您的工作目錄中,或者您需要提供RMD檔案的路徑:
knit("myPath/example.Rmd") # produces the md file
好的,因此您有一個文件(html檔案),您可以在其中記錄您的分析。現在,只需將示例程式碼替換為一些實際的材料,然後您便可以使用。
這種方法的一些好處包括:
- 禁止複製和貼上
- 一旦有了更多資料,新想法等,您的報告就可以輕鬆更新
- 因為它們就像其他任何程式碼一樣,所以您可以在版本控制下跟蹤knitr指令碼。
- 如果重要的話,可以顯示用於生成結果的程式碼位。
- 您的分析是完全透明和可重複的。
人們現在將knitr
用於各種用途,例如
- 編寫有關其資料的報告
- 準備教程
- 撰寫部落格文章。
避免麻煩
我們建議您使用setwd()
中的指令碼。這在這裡更重要。在Rmd檔案中更改工作目錄將導致麻煩。因此,建議您假設所有Rmd檔案都在專案的根目錄中執行,以使其執行。
顯示和隱藏程式碼及輸出
通過為每個程式碼塊設定選項,您可以選擇要包含在虛擬報告中的內容。
echo= TRUE
:如果要在報告中顯示程式碼,FALSE
或者要隱藏程式碼,請選擇此項 。results= "hide"
:如果要隱藏執行程式碼的結果,請選擇此選項。eval =FALSE
:導致不評估當前塊。
有關這些選項的更多詳細資訊,請參考
- 有關Knitr網站的完整文件 。
轉換為不同的文件格式
現在,如果要生成其他文件型別而不是html檔案怎麼辦?輸入pandoc。
根據其建立者的說法 ,“如果您需要將檔案從一種標記格式轉換為另一種標記格式,那麼pandoc是您的瑞士軍刀。它可以讀取各種輸入,包括markdown,reStructuredText,HTML,LaTeX,MediaWiki標記和DocBook XML。它可以編寫純文字,markdown,reStructuredText,XHTML,HTML 5,LaTeX(包括投影儀幻燈片),ConTeXt,RTF,DocBook XML,OpenDocument XML,ODT,Word docx,GNU Texinfo,MediaWiki標記,EPUB,FictionBook2,Textile ,groff手冊頁,Emacs Org-Mode,AsciiDoc和Slidy,Slideous,DZSlides或S5 HTML幻燈片放映。它還可以在安裝LaTeX的系統上產生PDF輸出。””
首先,您需要下載並安裝pandoc。安裝後,您便可以使用pnadoc
knitr軟體包隨附的 功能將生成的md檔案轉換為所需的任何格式。例如,要將上面的示例轉換為word文件,我們編寫:
- library(knitr)
- library(markdown)
- knit("example.Rmd") # produces the md file
- pandoc("example.md", format = "docx") # converts md file into docx
可重複的研究
因此,有了它,您便可以使用一組工具在R中進行可重複的研究。
參考文獻
最受歡迎的見解
1.如何解決線性混合模型中畸形擬合(SINGULAR FIT)的問題
4.R語言GGSURVPLOT繪製生存曲線報錯 : OBJECT OF TYPE ‘SYMBOL‘ IS NOT SUBSETTABLE