12

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

下面是我一直在尝试的一个片段。您可以在顶部看到我必须加载数据框(mtcars)。我还手动识别自变量 (ivs) 和因变量 (dvs)。我想将这些作为参数传递。我正在尝试做一个快速而肮脏的 SPSS 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 文件并将参数传递给它?还是有另一种方法来完成我想做的事情?

4

3 回答 3

29

另一种选择是列出您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"]
---

然后可以通过列表在报告正文中访问这些params

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

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

最后,通过将命名参数列表传递给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))

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

rmarkdown::render("MyDocument.Rmd", params = list(ivs = c("cyl", "wt")))

仍将使用mtcars数据集,但仅绘制cylwtmpg和的直方图qsec

于 2016-06-21T09:17:56.513 回答
4

我认为您可以使用knit2htmlfrom knitrpackage 来做“魔术”。

  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')
    
于 2013-09-21T08:38:07.043 回答
1

我认为https://github.com/yihui/knitr/issues/567提供了一个替代方案

您必须提前创建这些参数,例如

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

如果您想了解详细信息,那么knit()将识别里面的 argsmy.Rmd;查看参数envir

于 2014-10-03T09:01:06.687 回答