R語言-Knitr包的詳細使用說明

gaorongchao1990626發表於2013-11-18

R語言-Knitr包的詳細使用說明

by 揚眉劍 來自數盟【總舵】 群:321311420

1.相關資料

我的學習都是從以上三個資源中獲取。所以特意在資料夾中把1,2轉換為PDF, 希望大家仔細閱讀。

資料夾中還有一個knitr-refcard.pdf,裡面包括了一些常用的引數

2.環境

我們需要的是安裝過knitr包的RStudio。然後在Tools-option-Sweave-weave Rnw files using -選擇knitr (操作演示),新建一個test.Rmd然後後面的內容都在其中示範。

3.1 Markdown 是什麼,如何寫Markdown

Markdown 是一種輕量級標記語言。類似HTML,但是比html簡單的多,我在資料夾中放了一個markdown的語法說明。 大傢俱體可以用一段時間學會。我們這裡知道這麼幾點就可以了。標題,一個#後面跟一個空格代表一級標題,2個## 後面跟一個空格代表二級標題。

  • how are you 斜體
  • how are you 加粗

具體的語法看資料夾中的 Markdown語法說明(簡體中文版)

3.2 在Markdown中寫R程式碼

首先我們要新建一個Rmd的檔案,或者在File-new file-R markdown,新建一個Rmd的檔案。操作 Markdown中的R語言的程式碼是三個後引號(也就是在鍵盤左上角,Esc下面的那個鍵)然後後面加上{r}開始,{r,} 大括號中,r字母后面可以加入不同的引數。然後以三個後引號結束。當然都是在英文狀態下輸入的。

a = 1:10  #**程式碼的執行** Run 或者Ctrl+Enter
b = 11:20
a  #程式碼的註釋用#號開頭
##  [1]  1  2  3  4  5  6  7  8  9 10

3.3 是否計算程式碼塊引數 eval

是否計算程式碼塊中內容的選項。 兩個選項:TURE或者FALSE

# ```{r,eval=FALSE}
a
##  [1]  1  2  3  4  5  6  7  8  9 10
b
##  [1] 11 12 13 14 15 16 17 18 19 20

eval是計算程式碼塊中的內容。當eval=TRUE,計算,所以會在html中會顯示程式碼執行的結果,反之,不計算,不顯示。

還可以是數字選項,我們看一下下面兩段程式碼的區別

## # ```{r,eval=C(1)} ```{r,eval=-c(1)} #前面加一個負號,表示排除的意思
a
##  [1]  1  2  3  4  5  6  7  8  9 10
## b

也就是可以用eval=c()來控制那些行程式碼執行,那些不執行。

3.4 文字輸出相關引數

echo 兩個選項:TRUE或FALSE,或者是數字,用來控制那些行輸出,那些行不輸出。

# ```{r,echo=FALSE} ```{r,echo=c(1)} ```{r,echo=-c(1)}
a
##  [1]  1  2  3  4  5  6  7  8  9 10
b
##  [1] 11 12 13 14 15 16 17 18 19 20

對比上面兩個的結果,我們可以看出,echo是控制程式碼輸出的,但echo=TRUE的時候,在html中是輸出程式碼的,當echo=FALSE的時候是不輸出程式碼的。 warnings
error
message

以上都有兩個選項,也就是假如程式碼中有警告的資訊,報錯的資訊,或者其他的資訊,在 最後的報告中是否顯示,TURE是顯示,FALSE是不顯示。

3.5 程式碼修飾引數

3.5.1 tidy

# ```{r,tidy=FALSE} 首先安裝formatR這個包 install.packages('formatR')
a = 100
b = 100

這裡還有一個tidy.opts

# ```{r,tidy.opts=list(keep.blank.line=FALSE)}
a = 100
b = 100

3.5.2 prompt

這個就是是否顯示在R預設視窗中的>, 一般來說,FALSE是預設選項。沒人希望在每一行都輸出>

# ```{r,prompt=TRUE}
a
## [1] 100

3.5.3 comment

預設情況下我們生成HTML格式的檔案,所有的執行結果前面都有兩個##號(演示)

在這裡我們可以通過comment選項改變,當然這裡一般不用改變,沒有什麼意義。前面是#號,可以在我們複製程式碼的時候, 這裡的結果不會被執行。

a
~~~~ [1] 100

3.5.4 highlight 程式碼高亮選項

我沒有發現什麼變化,大家自己探索一下。

# ```{r,highlight=FALSE} install.packages('highlight')
data = c("1", "2")
for (i in a) {
    c = i
}

3.6 快取引數 cache

cache是程式碼塊計算得到的快取,可以是True也可以是False。預設為False,也就是每一次生成knit HTML,都會重新計算裡面的每一個程式碼塊。但是如果我們的程式碼非常的複雜。如果我們不希望每一次都重新執行,所有的程式碼塊,那麼我們可以設定cache為TRUE。 也就是,當程式碼塊第一次執行的時候會把結果儲存下來,然後當我們生成HTML的時候,就不用再重新計算,而是直接把前面儲存的結果哪裡,當程式複雜度高的時候,這個會節約 一定的時間。

3.7 Plot 作圖引數

3.7.1 fig.width fig.height

# ```{r,prompt=TRUE}
a
## [1] 100

3.7.2 fig.show = 'asis' 'hold' 'animate' 'hide'

  • asis:表示在哪裡生成就在哪裡顯示
  • hold:的意思是把圖片放到程式碼塊以後
  • animate: 如果程式碼塊中有生成幾幅圖片,可以將幾張圖片生成動畫。

用animate的要點是首先要安裝:animation包。 然後http://ffmpeg.zeranoe.com/builds/ 從這裡下載你需要的ffmpeg,然後直接解壓到當前資料夾,比如我解壓以後,重新命名為ffmpeg,然後放到c:\Program Files\
然後把C:\Program Files\ffmpeg\bin放入環境變數。 然後這個選項就可以用了。

1: 由於ffmpeg的最新版本出來的動畫,不一定在所有的瀏覽器都能播放,所以我在檔案中放了一個ffmpeg.exe 這個是11年的版本, 用起來沒有問題。

2:還有一個問題就是,如果你安裝過其他的軟體,裡面自帶的ffmpeg.exe,那麼可能你的路徑中的ffmpeg就不起作用了,檢視ffmpeg位置 的命令列:Sys.which(“ffmpeg”),這樣可以檢視當前使用的ffmpeg是在什麼地方。

3:然後提供一個最簡單的辦法,直接講我的資料夾中的ffmpeg扔到system32資料夾中就沒有任何問題了,也不用配置路徑了。

4:關於並行圖片生成的順序,非迴圈方式生成圖片順序問題,待驗證

當生成動畫的時候還有一個引數interval=2 可以設定兩個圖片之間的間隔。

所有引數都在網站有詳細的解釋,我也有可以有理解不對的地方,歡迎大家指正。謝謝。 http://yihui.name/knitr/options

4.行內程式碼

我們如果想在行文中直接嵌入R的程式碼也非常的方便,是以後引號加r開頭,然後後引號結尾。比如400。 非常的方便。

5.生成HTML

6.寫Latex

7.致謝

最應該感謝的當然是包的製作者-謝益輝,然後RStudio也是很不錯的。 同時,本文還參考了魏太雲的PPT,同樣非常感謝。在資料夾中一併附上。請大家自行參考。

相關文章