gpt4 book ai didi

r - 如何在 rmarkdown/knitr 中顺序输出部分(基数 r)图?

转载 作者:行者123 更新时间:2023-12-04 19:25:17 25 4
gpt4 key购买 nike

假设我有以下 rmarkdown 代码:

---
title: "Untitled"
author: "Author"
date: "04/12/2019"
output: ioslides_presentation
---

## Slide title

```{r echo=FALSE}
plot(1:10, axes = FALSE, ty = "n")
axis(1)
## Next
axis(2)
## Next
points(1:10, 1:10)
```

在每个 ## Next点我想输出绘图的当前状态,以便我可以顺序显示部分绘图。我的最终目标是在 ioslides 中创建后续幻灯片。带有顺序图的演示文稿,全部来自上面的代码(需要注意的是,理想情况下,我不希望后面的代码行能够影响前面的代码行,就像上面可能发生的那样)。

我希望它与我目前解决它的效果相同:
---
title: "Untitled"
author: "Author"
date: "04/12/2019"
output: ioslides_presentation
---

```{r setup, include=FALSE}

## Set up environment for running the code
env <- new.env()

## Source code to run, as a list of quotes

full_src <- list(
quote({
plot(1:10, axes = FALSE, ty = "n")
axis(1)
}),
quote({
axis(2)
}),
quote({
points(1:10, 1:10)
})
)

```

## Slide title

```{r echo=FALSE}
# Evaluate first set of lines
eval(full_src[[1]], envir = env)
# Reset environment so later code can't affect earlier code
rm(list = ls(envir = env), envir = env)
```

## Slide title

```{r echo=FALSE}
# Evaluate first and second set of lines
invisible(sapply(1:2, function(i) eval(full_src[[i]], envir = env)))
# Reset environment so later code can't affect earlier code
rm(list = ls(envir = env), envir = env)
```

## Slide title

```{r echo=FALSE}
# Evaluate all lines
invisible(sapply(1:3, function(i) eval(full_src[[i]], envir = env)))
```

输出的幻灯片如下所示:

Four slides

但正如你所看到的,这很笨拙,而且不是很笼统。解决方案的重要特征是绘图的代码行尽可能靠近,并且只编写一次;理想情况下,我可以用一个 block 选项/钩子(Hook)来做到这一点。

最好的答案将保留回显添加到图形中的新代码行的能力(例如, ## Next 标记之间的代码行),但仍会产生直到该点的整个图。

实现这一目标的最佳方法是什么?

编辑:另外,我希望能够将更改分组到一个绘图,而不仅仅是将每个更改输出到一个新绘图,所以 fig.keep不会工作。

最佳答案

block 选项 fig.keep可以采用数字向量来索引图,因此您可以通过 fig.keep = 2:4 选择最后三个图(或通过 fig.keep = -1 删除第一个图)。

要将不同幻灯片上的图表分组,您可以动态添加幻灯片标题。您可以使用 cat('\n\n## Title\n\n')使用 block 选项 results = 'asis' ,或使用 knitr::asis_output() .

下面是一个完整的例子:

---
title: "Untitled"
author: "Author"
date: "04/12/2019"
output: ioslides_presentation
---

```{r, include=FALSE}
new_slide = function(title = '\n\n## Next\n\n') {
knitr::asis_output(title)
}
```

## Slide title

```{r echo=FALSE, fig.keep=2:4}
plot(1:10, axes = FALSE, ty = "n")
axis(1)

new_slide()
axis(2)

new_slide()
points(1:10, 1:10)
```

请注意,当前版本的 中有一个错误。针织 , 其中 I just fixed on Github .现在你需要使用 Github 版本的 针织 :

if (packageVersion('knitr') <= '1.26')
remotes::install_github('yihui/knitr')

关于r - 如何在 rmarkdown/knitr 中顺序输出部分(基数 r)图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59180351/

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