对于研讨会附带的在线教程,我想强调网格包的使用(尤其是如何使用视口)。为此,我想逐步构建一个情节(即逐块)。在每个步骤/块之间,我想包含一些普通文本,以便更详细地解释每个步骤。
如何告诉 knitr 不要单独评估一个块,而是在前一个块结束的地方开始评估?基本上,我想要添加到前一个块的结果中,而不是对块的新评估。
在下面的代码中,当编织到 html 时,我在 .html 输出中得到 2 个图。第一个显示第一个块的结果(粉红色矩形和一些文本),第二个显示第二个块的结果(蓝色矩形)。我想要实现的是两个图 - 第一个显示第一个块的结果(如上),第二个显示第一个块的结果 + 第二个块的结果(粉红色矩形内的蓝色矩形)。基本上,我想重现在 R 控制台中运行时这两个代码块的行为。蓝色矩形应放在粉色矩形中,不要单独绘制。
这是第一块
```{r grid first vp, tidy = FALSE}
library(grid)
grid.newpage()
## draw a rectangle around the root vp and provide some text
grid.rect()
grid.text("this is the root vp", x = 0.5, y = 1, just = c("centre", "top"))
vp <- viewport(x = 0.5, y = 0.5,
height = 0.5, width = 0.5,
just = c("centre", "centre"))
pushViewport(vp)
grid.rect(gp = gpar(fill = "pink"))
grid.text("this is our first vp", x = 0.5, y = 1, just = c("centre", "top"))
```
然后是一些解释性文字:
“好的,所以现在我们在视口中间创建了一个视root
口,x = 0.5
并且是原始视口的一半高度和一半宽度y = 0.5
——并且。just = c("centre", "centre")
height = 0.5
width = 0.5
之后我们导航到这个视口 -pushViewport(vp)
然后我们绘制了一个填充整个视口的矩形并用粉红色填充它 -grid.rect(gp = gpar(fill = "pink"))
请注意,我们还没有离开视口。这意味着,无论我们现在做什么,都将发生在当前活动的视口(粉红色的视口)中。为了说明这一点,我们将再次重复上面完全相同的代码(我们只会更改填充颜色,以便更好地看到更改)。”
这是第二块
```{r grid second vp, tidy = FALSE}
vp <- viewport(x = 0.5, y = 0.5,
height = 0.5, width = 0.5,
just = c("centre", "centre"))
pushViewport(vp)
grid.rect(gp = gpar(fill = "cornflowerblue"))
```
有什么想法可以告诉 knitr “保留”之前的块中所做的任何事情,并将其作为当前块评估的“起点”吗?