2013-09-21 411 views
6

我正在嘗試創建一個通用的rmarkdown模板,它將對數據幀進行分析。我希望能夠將數據幀傳遞給一個rmarkdown文件,而不是每次都對其進行硬編碼。如何將變量傳遞給R markdown .Rmd文件?

下面是我一直在試驗的一個片段。你可以看到,在頂部我必須加載數據幀(mtcars)。我還手動識別自變量(ivs)和因變量(dvs)。我想將它們作爲參數傳遞。我試圖做一個快速和骯髒的SPSS Explore功能版本。 「Explore.Rmd」:

```{r} 
library(ggplot2) 
data(mtcars) 
mtcars$am <- factor(mtcars$am, levels=c(0,1), labels=c("Manual", "Automatic")) 
df <- mtcars 
ivs <- c("cyl", "disp", "hp", "drat", "wt", "am", "qsec") 
dvs <- c("mpg", "qsec") 
``` 

Histograms 
------------------------------------- 

```{r} 
for (v in union(ivs, dvs)) 
{ 
    hist <- ggplot(df, aes_string(x=v)) + geom_histogram() 
    print(hist) 
} 
``` 

我想有一些代碼看起來是這樣產生使用knitr或類似的東西的HTML。

myDF <- read.delim("mydata.tab") 
ivs <- c("iv1", "iv2", "iv3") 
dvs <- c("dv1", "dv2", "dv3") 
magic("Explore.Rmd", myDF, ivs, dvs) # <- how do I do this part? 

那麼,是否有可能有一個靜態的rmarkdown文件並將參數傳遞給它?或者是否有另一種方法來完成我想要做的事情?

+2

看看'knit_expand()' – baptiste

+0

哪裏我們能找到'knit_expand'函數嗎?你在說這個:http://cran.r-project.org/web/packages/knitr/vignettes/knit_expand.html? –

回答

4

我覺得你可以用knit2htmlknitr包來做「魔術」。

  1. 定義你的降價文件,這樣並保存爲mydoc.Rmd

    ```{r} 
    source('test.R') 
    ``` 
    ```{r} 
    library(ggplot2) 
    for (v in union(ivs, dvs)) 
    { 
        hist <- ggplot(myDF, aes_string(x=v)) + geom_histogram() 
    print(hist) 
    } 
    
  2. 在test.R您準備數據:

    myDF <- read.delim("mydata.tab") 
    ivs <- c("iv1", "iv2", "iv3") 
    dvs <- c("dv1", "dv2", "dv3") 
    
  3. 您編譯使用knitr

    Knit2html('mydoc.Rmd') 
    
+1

嗯..所以數據在哪裏傳遞?當用戶運行'Knit2html('mydoc.Rmd')'時,不應該在該調用中傳遞「mydata.tab」? – rmf

1

我認爲替代在https://github.com/yihui/knitr/issues/567

給出你將不得不提前創建這些參數,例如

args='2013' 
knit('../my.Rmd','test.html') 

my.Rmd;然後knit()將識別ARGS看到envir說法,如果你想了解細節

7

另一種選擇是要列出rmarkdown::render功能使用params的變量,請參閱:http://rmarkdown.rstudio.com/developer_parameterized_reports.html

rmarkdown::render("MyDocument.Rmd", params = list(df = myDF)) 

然後調用參數在YAML:

--- 
title: My Document 
output: html_document 
params: 
    df: myDF 
--- 

然後可以在報表主體由分配:

​​