From: Aaron Ecay <aaronecay@gmail.com>
To: "Charles C. Berry" <ccberry@ucsd.edu>
Cc: emacs-orgmode@gnu.org
Subject: Re: R code block produces only partial output
Date: Sat, 16 Aug 2014 16:58:25 -0400 [thread overview]
Message-ID: <87oavkp2xa.fsf@gmail.com> (raw)
In-Reply-To: <alpine.OSX.2.00.1408161025380.605@charles-berrys-macbook.local>
Hi Chuck,
Thanks for your feedback.
2014ko abuztuak 16an, "Charles C. Berry"-ek idatzi zuen:
> Aaron,
>
> I think doing something along these lines makes sense. evaluate() obviates
> the need for tryCatch() and capture.output(), and it makes customizing
> error/warning/message stuff clean. Its use might also lead to cleaner code
> for R graphics handling.
>
> But adding a dependency on the evaluate package is a significant step.
> This could be a nuisance for users whose code runs just fine right now. It
> would need to be installed anywhere R is executed, e.g. in remote
> sessions. The user would need to install it in her private directory if it
> is not on the system; some shops actually discourage this.
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
That’s ... special. Do you have experience with such environments?
>
> So, making it optional might be necessary.
I don’t like this idea; it means that we’d have to support the old,
hacky way of doing things indefinitely. I’d like to hear more from
people for whom local installation of R packages creates an issue.
>
> ---
>
> I looked at the patch briefly. Some comments:
>
> - You can ditch tryCatch and capture.output. You might browse
> knitr:::block_exec to see how it uses evaluate().
I’m not sure I see what you mean. The tryCatch exists to ensure that
the sentinel file is created, to signal emacs that the R code is done
running. It might not be strictly necessary, as long as the rest of
babel’s injected code is error-free (evaluate takes care of catching
errors in user code). But emacs will busy-wait indefinitely if the
creation of that file does not happen, so I have tried to play it safe.
As for capture.output, the knitr function you reference is doing a lot
of heavy lifting; I don’t understand it all. I just need to get the
result of evaluate() into a file somehow. There are other ways of doing
this than capture.output + replay, but it seems like they’d be just as
complicated.
>
> - Wrap the code in local() to keep objects you create from persisting
> where they might not be wanted. I think using
> local({ res <- evaluate(input, envir=parent.frame(2),...); <...>})
> will get assignments from `input' properly placed.
I omitted to rm() .org.eval.result for debugging purposes, but in the
final patch I will do so. I much prefer an explicit variable creation /
rm() to environment-hacking.
>
> - let stop_on_error, keep_warning, and keep_message args be customizable
> or depend on a header arg. (Then I can stop wrapping require() in
> suppressPackageStartupMessages() which I always misspell. Argh!)
I don’t like this, since it would not carry over to the other 3/4
cases (value results in a session; either type of result outside of a
session). I’d like to get this patch working first, and then focus on
the others. It may be that we want to move to using the evaluate
package in all cases, in which case this suggestion would be workable.
--
Aaron Ecay
next prev parent reply other threads:[~2014-08-16 20:58 UTC|newest]
Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-08-04 11:18 R code block produces only partial output Andreas Kiermeier
2014-08-04 11:53 ` Eric Schulte
2014-08-04 12:23 ` Andreas Kiermeier
2014-08-04 13:10 ` Eric Schulte
2014-08-05 0:46 ` Andreas Kiermeier
2014-08-05 4:00 ` John Hendy
2014-08-05 4:31 ` Andreas Kiermeier
2014-08-05 18:05 ` Charles Berry
2014-08-05 19:02 ` Eric Schulte
2014-08-05 19:11 ` John Hendy
2014-08-05 19:57 ` Nick Dokos
2014-08-05 20:10 ` Nick Dokos
2014-08-05 22:21 ` Charles C. Berry
2014-08-06 3:32 ` Aaron Ecay
2014-08-06 11:30 ` Eric Schulte
2014-08-07 6:00 ` Aaron Ecay
2014-08-07 17:42 ` Charles C. Berry
2014-08-07 18:06 ` Aaron Ecay
2014-08-07 18:42 ` Charles C. Berry
2014-08-07 19:06 ` Thomas S. Dye
2014-08-09 8:54 ` Rainer M Krug
2014-08-16 5:05 ` Aaron Ecay
2014-08-16 18:50 ` Charles C. Berry
2014-08-16 20:58 ` Aaron Ecay [this message]
2014-08-17 6:03 ` Achim Gratz
2014-08-19 0:13 ` Aaron Ecay
2014-08-19 5:36 ` Achim Gratz
2014-08-23 8:32 ` Aaron Ecay
2014-08-23 9:24 ` Andreas Kiermeier
2014-08-23 17:10 ` Aaron Ecay
2014-08-23 18:35 ` Thomas S. Dye
2014-08-23 19:37 ` Ista Zahn
2014-08-24 0:10 ` Charles C. Berry
2014-08-28 5:24 ` Aaron Ecay
2014-09-01 5:00 ` Aaron Ecay
2014-09-01 16:08 ` Charles C. Berry
2014-08-09 8:48 ` Rainer M Krug
2014-08-06 1:11 ` Andreas Kiermeier
2014-08-06 2:21 ` Charles C. Berry
2014-08-06 3:24 ` Aaron Ecay
2014-08-06 15:59 ` Charles C. Berry
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
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87oavkp2xa.fsf@gmail.com \
--to=aaronecay@gmail.com \
--cc=ccberry@ucsd.edu \
--cc=emacs-orgmode@gnu.org \
/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 external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.