如何在knitr中参数化模板块?

时间:2017-03-29 20:23:29

标签: r knitr

说我在knitr中有以下代码。如何使用不同的i值多次运行它?

```{r, echo=FALSE}
i<-0.1
```

### X,Y plot of Y=X+e where e is a standard normal distro: mean=0, sd=`r i`

```{r, echo=FALSE}
r<-rnorm(100,mean=0,sd=i)
x<-seq(0,1,length.out=100)
y<-x+r
plot(x,y)
```

修改

正如所建议的那样......我试图做这样的事情:在R代码块中启动一个循环,在它们之间有一个模板,然后关闭循环 - R抛出并出错。

```{r, echo=FALSE}
for (i in 1:4) {
```

# bla 

```{r, echo=FALSE}
}
```

1 个答案:

答案 0 :(得分:2)

使这个问题变得棘手的原因是,不仅必须重复块内容(绘图),还要重复标题。这就是为什么我们既不能简单地reuse the chunk也不能像

那样循环遍历绘图命令
for (i in 1:3) { plot(rnorm(100, sd = i)) }

但它几乎就是这么简单:我们遍历生成绘图的代码并从循环内输出标题。这需要chunk option results="asis"cat获取逐字降价输出:

```{r, echo=FALSE, results = "asis"}
sdVec <- c(0.1, 0.2, 0.3)
for (sd in sdVec) {
  cat(sprintf("\n### X,Y plot of Y=X+e where e ~ N(0, %s)", sd))
  r<-rnorm(100,mean=0,sd=sd)
  x<-seq(0,1,length.out=100)
  y<-x+r
  plot(x,y)
}
```

有关相关问题,请参阅this answer