-
-
Notifications
You must be signed in to change notification settings - Fork 878
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Plot in asis output before a knit_child
gets placed after
#2313
Comments
Not sure from which data Instead of See the others recipes in the cookbook about that:
This will allow you to add your plots inside a chunk, with right conditional. That way each plot will be differently handle and correctly by knitr. You can't just I let you try a version. I can show you if you share with the data. |
@cderv Sorry because the minrep was not complete. Now I updated including data source. |
Can you format correctly please ? https://yihui.org/issue/#please-format-your-issue-correctly Also you can try with what I shared. I believe it will make your intention works |
@cderv Yes. I updated the format again. Sorry for the inconvenience. Going to matter, I do not understand how should I do. https://bookdown.org/yihui/rmarkdown-cookbook/child-document.html with Thanks! |
Several examples directly creating text to knit as a childThis is close to what you are doing, but instead, you are just generating the child content as a whole as a vector. Not using ---
title: test
output:
html_document:
keep_md: true
---
```{r setup, echo=TRUE, include=FALSE}
knitr::opts_chunk$set(echo = FALSE, results = 'asis',
fig.height = 6, fig.width = 10,
eval = TRUE, message = FALSE, warning = FALSE)
library(knitr)
Speed <- cars$speed
Distance <- cars$dist
```
```{r echo = FALSE, results='asis'}
content <- c()
for (i in 1:1) {
for (j in 1:2) {
content <- c(
content,
sprintf("j = %d", j),
"\n\n",
"```{r, echo = FALSE}",
if (j == 1) 'plot(Speed, Distance, panel.first = grid(8, 8), pch = 0, cex = 1.2, col = "blue")',
if (j == 2) 'plot(Speed, Distance, panel.first = lines(stats::lowess(Speed, Distance), lty = "dashed"), pch = 0, cex = 1.2, col = "blue")',
"```",
"\n\n",
"```{r, echo = FALSE}",
"kable(mtcars)",
"```",
"\n\n"
)
}
content <- c(
content,
c(
'```{r}',
'plot(pressure)',
"```",
"\n\n"
)
)
}
knitr::knit_child(text = content, envir = environment(), quiet = TRUE) |> cat(sep = "\n")
``` Using an external child documentYou write the content to use in test.Rmd---
title: test
output:
html_document:
keep_md: true
---
```{r setup, echo=TRUE, include=FALSE}
knitr::opts_chunk$set(echo = FALSE, results = 'asis',
fig.height = 6, fig.width = 10,
eval = TRUE, message = FALSE, warning = FALSE)
library(knitr)
Speed <- cars$speed
Distance <- cars$dist
```
```{r echo = FALSE, results='asis'}
res <- lapply(1:2, function(j) {
knit_child("_child.Rmd", envir = environment(), quiet = TRUE)
})
cat(unlist(res), sep = '\n')
```
```{r}
kable(mtcars)
```
```{r}
plot(pressure)
``` _child.Rmdj = `r j`
```{r, eval = j == 1, echo = j == 1}
plot(Speed, Distance, panel.first = grid(8, 8), pch = 0, cex = 1.2, col = "blue")
```
```{r, eval = j == 2, echo = j == 2}
plot(Speed, Distance, panel.first = lines(stats::lowess(Speed, Distance), lty = "dashed"), pch = 0, cex = 1.2, col = "blue")
```
Same but using
|
@cderv Wow! That is impressive. Finally I could get what I wanted using an external child document and splitting code in distinct chunks there. Thank you for your help. I keep the issue open as I believe the behaviour reported is yet a bug. Feel free to close it if that behaviour is expected (and already documented?) |
It is tricky as issue because you are missing
It would require to minimized the example I believe. @yihui do you think there is something to look into ? |
Actually |
Oh that is why. Ok thanks for clarification ! |
A smaller reprex with ---
title: test
output:
html_document:
keep_md: true
---
```{r pressure, results='asis'}
plot(cars$speed, cars$dist, panel.first = grid(8, 8), pch = 0, cex = 1.2, col = "blue")
knitr::kable(head(cars))
knitr::knit_child(text = c(
'```{r}',
'plot(pressure)',
'```'
), envir = environment(), quiet = TRUE) |> cat(sep="\n")
``` Which do no happen without ---
title: test
output:
html_document:
keep_md: true
---
```{r pressure, results='asis'}
plot(cars$speed, cars$dist, panel.first = grid(8, 8), pch = 0, cex = 1.2, col = "blue")
knitr::kable(head(cars))
plot(pressure)
``` So probably something to look into 🤔 |
for
loop wrongly placed in last iteration, seemingly due to knit_child
knit_child
gets placed after
This does seem to be a complicated bug. I haven't figured out the reason after some investigation. Sorry. |
Hi @yihui!
In the next minimal reproducible example, for j=1, the scatterplot between
Speed
andDistance
is placed before themtcars
kable
, as expected, but forj=2
it is placed just before the plot inknit_child
. This issue happens only when including theknit_child
block. Further, I include 2 different plots for j=1 and j=2, since if it is the same plot it is printed a unique time just before the plot inknit_child
(would be this another bug?).I included the
cat('\n\n<!-- -->\n\n')
thinking if they could solve the issue, as you suggests in https://bookdown.org/yihui/rmarkdown-cookbook/kable.html#generate-multiple-tables-from-a-for-loop.Since that does not work, how may I avoid this issue?
Also, may this issue be related to #2166 ?
Thanks!
Below the minrep and at the end the promises you ask for to fill an issue.
j = 1
j = 2
R version 4.3.2 (2023-10-31)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Debian GNU/Linux 12 (bookworm)
Locale:
LC_CTYPE=en_GB.UTF-8 LC_NUMERIC=C
LC_TIME=en_GB.UTF-8 LC_COLLATE=en_GB.UTF-8
LC_MONETARY=en_GB.UTF-8 LC_MESSAGES=en_GB.UTF-8
LC_PAPER=en_GB.UTF-8 LC_NAME=C
LC_ADDRESS=C LC_TELEPHONE=C
LC_MEASUREMENT=en_GB.UTF-8 LC_IDENTIFICATION=C
Package version:
evaluate_0.23 graphics_4.3.2 grDevices_4.3.2 highr_0.10
knitr_1.45 methods_4.3.2 stats_4.3.2 tools_4.3.2
utils_4.3.2 xfun_0.41 yaml_2.3.8
Created on 2023-12-20 with reprex v2.0.2
By filing an issue to this repo, I promise that
xfun::session_info('knitr')
. I have upgraded all my packages to their latest versions (e.g., R, RStudio, and R packages), and also tried the development version:remotes::install_github('yihui/knitr')
.I understand that my issue may be closed if I don't fulfill my promises.
The text was updated successfully, but these errors were encountered: