emacs-orgmode
[Top][All Lists]
Advanced

[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


reply via email to

[Prev in Thread] Current Thread [Next in Thread]