[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [O] R code block produces only partial output
From: |
Charles C. Berry |
Subject: |
Re: [O] R code block produces only partial output |
Date: |
Sat, 23 Aug 2014 17:10:16 -0700 |
User-agent: |
Alpine 2.00 (OSX 1167 2008-08-23) |
Aaron,
Some comments inline.
A patch that modifies what you have done is attached. Apart from adding
`org-babel-local-file-name' in two places, I think it is functionally
that same as yours, but I find the R code easier to follow.
On Sat, 16 Aug 2014, Aaron Ecay wrote:
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?
Not really. Just seen complaints...
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.
The old hacky way works pretty well most of the time. I suspect that it
will be hard to get folks to really test a new ob-R.el in advance of its
moving to maint. ./lisp/test-ob-R.el only has one :session src block and
a few other src blocks...
I was thinking of having a drop in replacement for the each of the two
functions that are changed and maybe selecting which version to use with
defalias. If there is a slicker way to enable a user to revert to an
earlier version without having good git skills, fine. But I think the
possibility of breaking something that someone needs and not noticing till
the changes go to maint is high.
---
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.
Not sure I get why the sentinel file is needed, but the patch here uses
on.exit(file.create(...)) to ensure that that file is created. One hiccup
(not sure if it exists in master,too) is that starting a remote session
and then trying to run src blocks from a buffer for a local file will hang
(because a local temp file is used for sentinel). So there is still stuff
to do.
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.
After looking more at evaluate and that knitr function, I am not keen to
replace replay() to obviate sink() or capture.output(). I had thought that
the output_handler arg offered more potential that it actually does. If
you ever feel the need to revise how graphics handling is done, it might
be worth working thru what Yihui does there.
- 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.
Putting objects in userspace is considered poor practice. FWIW, CRAN
disallows it. `environment-hacking' as you call it underlies much of R. If
you must create and hold variables use the attach(NULL,name="org-vars")
trick.
- 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.
Fair enough.
Best,
Chuck
0002-merge-CCBs-version.patch
Description: modify AE's session-results-output patch
- Re: [O] R code block produces only partial output, (continued)
- Re: [O] R code block produces only partial output, Charles C. Berry, 2014/08/16
- Re: [O] R code block produces only partial output, Aaron Ecay, 2014/08/16
- Re: [O] R code block produces only partial output, Achim Gratz, 2014/08/17
- Re: [O] R code block produces only partial output, Aaron Ecay, 2014/08/18
- Re: [O] R code block produces only partial output, Achim Gratz, 2014/08/19
- Re: [O] R code block produces only partial output, Aaron Ecay, 2014/08/23
- Re: [O] R code block produces only partial output, Andreas Kiermeier, 2014/08/23
- Re: [O] R code block produces only partial output, Aaron Ecay, 2014/08/23
- Re: [O] R code block produces only partial output, Thomas S. Dye, 2014/08/23
- Re: [O] R code block produces only partial output, Ista Zahn, 2014/08/23
- Re: [O] R code block produces only partial output,
Charles C. Berry <=
- Re: [O] R code block produces only partial output, Aaron Ecay, 2014/08/28
- Re: [O] R code block produces only partial output, Rainer M Krug, 2014/08/09
- Re: [O] R code block produces only partial output, Andreas Kiermeier, 2014/08/05
- Re: [O] R code block produces only partial output, Charles C. Berry, 2014/08/05
- Re: [O] R code block produces only partial output, Aaron Ecay, 2014/08/05
- Re: [O] R code block produces only partial output, Charles C. Berry, 2014/08/06