[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Output of R code block: only text or plot but not both? And only one
From: |
Berry, Charles |
Subject: |
Re: Output of R code block: only text or plot but not both? And only one "result" can be output? |
Date: |
Wed, 5 Jun 2024 17:36:58 +0000 |
Giuseppe,
> On Jun 3, 2024, at 6:47 AM, Giuseppe Pagnoni <gpagnoni@gmail.com> wrote:
>
> Hi,
>
> I am trying to have an R code block output both the results of a numerical
> expression AND a plot, but if I set up the header arguments to display the
> plot, the numerical outcome is not displayed. A simple example:
>
> #+begin_src R :file example.png :results output graphics file
> x <- rnorm(100)
> print(mean(x))
> hist(x)
> #+end_src
>
Babel is a great tool, but has some inherent limitations.
Whilst you can work around this by breaking the above block into multiple src
blocks, you might have an easier time using ox-ravel [1]. Basically, you export
your *.org document to one of the knitr/Rmarkdown/quarto formats (e.g. *.Rmd)
and then render the final output using one of those engines. This gives you
access to the capabilities of any of those engines. The downside, of course,
is that you need to learn a bit about the formatting rules in one of them to
fine tune your final output.
FWIW, I copy and pasted your query to a `*.org` file, exported it to `*.Rmd`
with the latest ox-ravel version and rendered it as html - displaying all the
printed output and all three plots. That did not need any modifications to your
markup.
> Here I get the histogram plot back in the buffer, but NOT the result of
> "print(mean(x))". Is it not possible to get both?
>
> Furthermore, what if I wanted to display *two* or more plots that get built
> by the code, for instance:
>
> #+begin_src R :file example.png :results output graphics file
> x <- rnorm(100)
> print(mean(x))
> hist(x)
> hist(x^2)
> #+end_src
>
> Here, only the last plot gets displayed. Is it not possible to display more
> than 1 plot?
>
If you want to do this with babel, do the computations in an initial block and
then use subsequent blocks for each of the displayed outputs/graphs. You will
need to use the `:session` header arg to retain the data in `x' across blocks.
HTH,
Chuck
[1] https://github.com/chasberry/orgmode-accessories