如何将变量传递到R markdown .Rmd文件?

Jim*_*Jim 9 r r-markdown

我正在尝试创建一个通用的rmarkdown模板,用于对数据框进行分析.我希望能够将数据帧传递给rmarkdown文件,而不是每次都对其进行硬编码.

下面是我一直在尝试的片段.你可以看到在顶部我必须加载数据框(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)
}
```
Run Code Online (Sandbox Code Playgroud)

我希望代码看起来像这样使用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?
Run Code Online (Sandbox Code Playgroud)

那么,是否可以使用静态rmarkdown文件并将参数传递给它?还是会有另一种方法来完成我想要做的事情?

Pet*_*900 17

另一种选择是paramsrmarkdown::render函数中列出您的变量,请参阅:http://rmarkdown.rstudio.com/developer_parameterized_reports.html.

首先,声明并提供rmarkdown文档的YAML中参数的默认值:

---
title: My Document
output: html_document
params:
    df: !r data(mtcars); mtcars
    ivs: ["cyl", "disp", "hp", "drat", "wt", "am", "qsec"]
    dvs: ["mpg", "qsec"]
---
Run Code Online (Sandbox Code Playgroud)

然后可以通过列表在报告正文中访问它们params:

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

```{r}
for (v in union(params$ivs, params$dvs))
{
   hist <- ggplot(params$df, aes_string(x=v)) + geom_histogram()
   print(hist)
}
```
Run Code Online (Sandbox Code Playgroud)

最后,通过将命名参数列表传递给rmarkdown::render:来覆盖默认值:

myDF <- read.delim("mydata.tab")
ivs <- c("iv1", "iv2", "iv3")
dvs <- c("dv1", "dv2", "dv3")
rmarkdown::render("MyDocument.Rmd", 
                  params = list(df = myDF, ivs = ivs, dvs = dvs))
Run Code Online (Sandbox Code Playgroud)

由于YAML定义了默认值,因此只需提供想要覆盖的内容,例如,

rmarkdown::render("MyDocument.Rmd", params = list(ivs = c("cyl", "wt")))
Run Code Online (Sandbox Code Playgroud)

仍然使用mtcars的数据集,但只绘制直方图cyl,wt,mpg,和qsec.


ags*_*udy 4

我认为你可以使用knit2htmlfromknitr包来实现“魔法”。

  1. 您可以像这样定义 Markdown 文件并将其另存为 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)
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 在 test.R 中,您准备数据:

    myDF <- read.delim("mydata.tab")
    ivs <- c("iv1", "iv2", "iv3")
    dvs <- c("dv1", "dv2", "dv3")
    
    Run Code Online (Sandbox Code Playgroud)
  3. 您使用knitr进行编译

    Knit2html('mydoc.Rmd')
    
    Run Code Online (Sandbox Code Playgroud)

  • 嗯..那么数据传递到哪里了?当用户运行 `Knit2html('mydoc.Rmd')` 时,不应该在该调用中传递“mydata.tab”吗? (2认同)