【问题标题】:How do I parameterize template blocks in knitr?如何在 knitr 中参数化模板块?
【发布时间】:2017-03-29 20:23:29
【问题描述】:

假设我在 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}
}
```

【问题讨论】:

  • 你可以reuse这个块,但是你为什么不多次循环这4行代码呢?
  • 准确地说...我如何遍历标题——这有点像我的问题——
  • 对不起,我一开始没有明白这一点。我认为### X,Y plot ... 是作为 R 评论的,而错过了它是一个降价标题。上下文很重要……请参阅我的答案(很快)。
  • @CL,非常感谢 - 期待它

标签: r knitr


【解决方案1】:

使这个问题变得棘手的是,不仅块内容(情节)必须重复,而且标题也必须重复。这就是为什么我们既不能简单地 reuse the chunk 也不能像循环那样循环 plot 命令

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-27
    • 1970-01-01
    相关资源
    最近更新 更多