gpt4 book ai didi

在后续代码块中重用图形设备

转载 作者:行者123 更新时间:2023-12-01 03:47:06 27 4
gpt4 key购买 nike

以下 R-Markdown 代码不适用于 Knitr:

Create a bimodal toy distribution.

```{r}
a = c(rnorm(100, 5, 2), rnorm(100, 15, 3))
```

Set up the graphics device.

```{r fig.show='hide'}
plot(0, type = 'n', xlim = c(0, 20), ylim = c(0, 0.2), axes = FALSE)
```

Plot the density.

```{r}
polygon(density(a), col = 'black')
```

Knitr 假定图形设备在 R 代码块的末尾结束,并关闭该设备。因此,我不能重用(在第三个代码块中)以前设置的图形设备。

我的问题很简单:我怎样才能做到这一点?

最佳答案

您可以通过 recordPlot() 保留之前的情节, 并用 replayPlot() 重绘它.这可以在自定义 block Hook 函数中完成。这是一个简单的例子:

```{r setup}
library(knitr)
knit_hooks$set(plot.reuse = local({
last = NULL
function(before, options) {
if (!isTRUE(options$plot.reuse)) {
last <<- NULL
return(NULL)
}
if (before) {
if (inherits(last, 'recordedplot')) replayPlot(last)
} else {
last <<- recordPlot()
}
return(NULL)
}
}))
```

Draw a plot.

```{r test-a, plot.reuse=TRUE}
plot(cars)
```

Add a line to the previous plot:

```{r test-b, plot.reuse=TRUE}
abline(lm(dist~speed, data=cars))
```

您还可以使用未记录的功能 opts_knit$set(global.device = TRUE)这样整个文档总是使用相同的图形设备,永远不会关闭。虽然已经有两年了,但我从来没有在公众场合提到过这个功能,因为我没有仔细考虑过这种做法可能带来的意想不到的后果。

关于在后续代码块中重用图形设备,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25931799/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com