From: "Berry, Charles" <ccberry@health.ucsd.edu>
To: Ihor Radchenko <yantar92@posteo.net>
Cc: Jeremie Juste <jeremiejuste@gmail.com>,
Jack Kamm <jackkamm@gmail.com>,
Giuseppe Pagnoni <gpagnoni@gmail.com>,
"emacs-orgmode@gnu.org" <emacs-orgmode@gnu.org>
Subject: Re: [FR] Org babel: mixing multiple outputs (was: Output of R code block: only text or plot but not both? And only one "result" can be output?)
Date: Wed, 5 Jun 2024 20:34:07 +0000 [thread overview]
Message-ID: <61BAA873-84A1-4696-ABC5-9A935FB1FA91@health.ucsd.edu> (raw)
In-Reply-To: <87cyov5k63.fsf@localhost>
> On Jun 5, 2024, at 11:17 AM, Ihor Radchenko <yantar92@posteo.net> wrote:
>
> "Berry, Charles" <ccberry@health.ucsd.edu> writes:
>
>>> 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.
>
> While it is currently not directly possible to get a mix output and
> graphics results, this is _not_ inherent limitation.
>
Fair enough, it is not `inherent'.
> One can write a patch for ob-R to produce output type that mixes all the
> block results, including textual output, graphical output, and any other
> perceivable output.
Won't you still have issues like the `:session :results output' conundrum mentioned below?
>
> Such patch would be a reasonable addition to babel backends like ob-R or ob-python.
>
>> 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.
>
> Thanks for sharing the project!
> Although, I would not call going through double export, and producing
> html output "easier time".
>
The `easier' part is that knitr/Rmarkdown requires very little markup to produce nice documents in various formats (pdf, html, Word, ...). And dealing with R code and markup of the results of R code for use in documents is what that environment is attuned to, so getting a desired result often seemed easier to me in that environment.
In terms of my usual workflow, the double export (with ox-ravel and an `org-render` helper function loaded) requires these keystrokes:
`C-c C-e r m M-x org-render RET`
or subsequently
`C-u C-c C-e M-x M-p RET`
which adds only two keystrokes.
> While we are here, are there any other features you find missing in Org
> babel that are present in knitr/Rmarkdown/quarto?
>
`:session :results output` handling in R lang src blocks can fail as the heuristics for finding the output of a command in the session buffer and removing the prompts have limited success. An ECM:
#+begin_src R :session :results output
cat("2 > 1\n")
#+end_src
There are workarounds, of course.
There was discussion here years ago of using an R package (evaluate?) to better parse the session results. I can't recall why this was dropped - maybe it was the requirement of additional software.
I recall hearing that `comint.el` would someday be replaced by a hardier package, so maybe if/when that happens this can be cured.
A big motivation for creating `ox-ravel' was to be able to cache large objects. I know the `:cache` header arg helps for small objects that require a lot of computation, but AFAICS does not help once the object size gets large. The caching options [1] of knitr and friends are flexible and powerful enough to support the genomics work I do.
I mentioned above that knitr is attuned to working with R code/output. The handling of warnings, errors, and messages resulting from R code has a number of useful options under `Text Output` [2].
I guess a rewrite of ob-R.el to implement such features as object caching and error/warning/message handling is feasible, but would require a lot of effort. And since those features (and more - like animation support) are already implemented in the knitr/Rmarkdown domain is it really worth pursuing?
Best,
Chuck
[1] https://yihui.org/knitr/options/#cache
[2] https://yihui.org/knitr/options/#text-output
next prev parent reply other threads:[~2024-06-05 20:40 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-06-03 13:47 Output of R code block: only text or plot but not both? And only one "result" can be output? Giuseppe Pagnoni
2024-06-05 17:36 ` Berry, Charles
2024-06-05 18:17 ` [FR] Org babel: mixing multiple outputs (was: Output of R code block: only text or plot but not both? And only one "result" can be output?) Ihor Radchenko
2024-06-05 20:34 ` Berry, Charles [this message]
2024-06-07 10:46 ` Ideas for improving ob-R (was: [FR] Org babel: mixing multiple outputs (was: Output of R code block: only text or plot but not both? And only one "result" can be output?)) Ihor Radchenko
2024-06-05 18:37 ` Output of R code block: only text or plot but not both? And only one "result" can be output? Ihor Radchenko
2024-06-07 8:56 ` Giuseppe Pagnoni
2024-06-07 9:10 ` Giuseppe Pagnoni
2024-06-07 9:19 ` Ihor Radchenko
2024-06-07 9:31 ` Giuseppe Pagnoni
2024-06-07 9:39 ` Giuseppe Pagnoni
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.orgmode.org/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=61BAA873-84A1-4696-ABC5-9A935FB1FA91@health.ucsd.edu \
--to=ccberry@health.ucsd.edu \
--cc=emacs-orgmode@gnu.org \
--cc=gpagnoni@gmail.com \
--cc=jackkamm@gmail.com \
--cc=jeremiejuste@gmail.com \
--cc=yantar92@posteo.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).