備份自:http://blog.rainy.im/2015/05/16/rmarkdown-in-rstudio/
RStudio 是 R 語(yǔ)言的一款開(kāi)源的 GUI 軟件预伺,可以讓“用不起Matlab只好用R”的用戶體驗(yàn)到很像 Matlab 一樣的開(kāi)發(fā)環(huán)境所踊,包括變量的顯示软吐、package 的基本操作、幫助文檔等一系列圖形界面。RStudio 另一個(gè)隱藏功能是可以當(dāng)做 Markdown 編輯器來(lái)用(R Markdown),可以根據(jù)數(shù)據(jù)處理結(jié)果快速生成報(bào)告文檔教届,這一功能主要通過(guò) Package Knit 及相關(guān)組件完成。R Markdown 的兩大特別之處驾霜,一是通過(guò) Pandoc 將 Markdown 轉(zhuǎn)化成 LaTex案训,再由強(qiáng)大的 LaTex 轉(zhuǎn)換成 HTML、PDF粪糙、Word强霎,理論上來(lái)說(shuō)借助 LaTex 可以生成學(xué)術(shù)論文、期刊雜志蓉冈、數(shù)據(jù)報(bào)告等規(guī)范格式的文檔城舞;另一大特點(diǎn)是整合了 R 語(yǔ)言的環(huán)境,可以在 Markdown 語(yǔ)法中 code block 直接執(zhí)行 R 語(yǔ)言代碼并將結(jié)果插入文檔寞酿。
安裝 package rmarkdown
可以通過(guò) RStudio 中的新建按鈕創(chuàng)建 R Markdown 文件家夺,此時(shí)可能提示安裝 rmarkdown 包:
install.packages(rmarkdown)
創(chuàng)建文檔可以選擇文檔標(biāo)題、作者以及將要輸出的文檔格式等伐弹,這些也可以在之后更改:
第一次按 Kint PDF(或 Kint HTML)時(shí)可能出現(xiàn)錯(cuò)誤:
Knit PDF : pandoc document conversion failed with error 43
可以通過(guò)安裝 github 上最新的版本解決:
install.packages("devtools") # 如果以前沒(méi)有安裝 devtools 包
devtools::install_github("rstudio/rmarkdown")
第二個(gè)問(wèn)題當(dāng)是文檔中有中文的情況拉馋,可能提示:
! Package inputenc Error: Unicode char \u8:年 not set up for use with LaTeX.
Try running pandoc with --latex-engine=xelatex.
如果有中文,LaTex 引擎需要選擇為 xelatex惨好,可以通過(guò)下圖的方式進(jìn)行更改:
或者直接在文檔頭信息中加入:
output:
pdf_document:
latex_engine: xelatex
這樣就可以正常輸出為 PDF 文檔了椅邓,但是會(huì)發(fā)現(xiàn)所有的中文全部都是空白,這個(gè)主要是 LaTex 的配置問(wèn)題昧狮,中文需要中文字體來(lái)渲染,可以通過(guò)在文件頭中引入 LaTex 文件進(jìn)行配置:
outputs:
pdf_document:
includes:
in_header: header.tex
latex_engine: xelatex
其中 header.tex
可以是:
\usepackage{xeCJK}
\setCJKmainfont{楷體} % 字體可以更換
\setmainfont{Georgia} % 設(shè)定英文字型
\setromanfont{Georgia} % 字型
\setmonofont{Courier New}
更多詳細(xì)配置可以參考官方文檔板壮。
在 code block 中選擇展示 R 語(yǔ)言執(zhí)行結(jié)果
具體使用方式見(jiàn)下圖:
# {r, comment='# >', collapse=TRUE}
a <- 1
typeof(a);mode(a);class(a)
輸出結(jié)果為:
a <- 1
typeof(a);mode(a);class(a)
# > [1] "double"
# > [1] "numeric"
# > [1] "numeric"
甚至可以直接生成圖像并插入文檔(當(dāng)然結(jié)果這里是看不到了逗鸣,可以在生成的 PDF 或 HTML 中看到繪圖結(jié)果):
x <- seq(from = -5, to = 5, by = 0.01)
y <- dnorm(x)
plot(x, y)
本文內(nèi)容在 R Markdown 中生成的 PDF 部分效果如下:
參考: