From mtmorgan at fhcrc.org  Thu Feb 22 01:28:48 2007
From: mtmorgan at fhcrc.org (Martin Morgan)
Date: Wed, 21 Feb 2007 16:28:48 -0800
Subject: [Rd] non-interactive R_tryEval does not return
In-Reply-To: <Pine.LNX.4.64.0702212231510.12540@gannet.stats.ox.ac.uk> (Brian
	Ripley's message of "Wed, 21 Feb 2007 22:58:04 +0000 (GMT)")
References: <6phmz37go2f.fsf@gopher4.fhcrc.org>
	<Pine.LNX.4.64.0702212231510.12540@gannet.stats.ox.ac.uk>
Message-ID: <6ph8xerghmn.fsf@gopher4.fhcrc.org>

Prof Brian Ripley <ripley at stats.ox.ac.uk> writes:

> Yes, this is as expected/documented (in so far as R_tryEval is
> documented: it is not part of the API, as far as I am aware).
>
> Its point is to be the equivalent of submitting an expression from the
> toplevel and returning to the toplevel, without using
> R_ReadConsole. So it behaves in just the same ways as any other R
> session with respect to R errors.

Unpacking the above a bit, I guess the meaning of 'as expected /
documented' is that in non-interactive modes errors halt R (in
errors.c just before LONGJMP(R_ToplevelContext->cjmpbuf, 0)). This
does not seem quite consistent with the idea that R_tryEval is 'the
equivalent of submitting an expression from the toplevel and returning
to the toplevel', since in this case there is no return to the top
level.  This tension is where my problem came from.

> I think in all the intended uses R would be in interactive mode, and I
> suspect it is an oversight that Rf_initEmbeddedR does not set that on
> Unix-alikes (it does on Windows).  You can set R_Interactive
> afterwards, of course.

Alternative GUIs might want an interactive, embedded R. I would have
thought other uses (web services for me) would rather a
non-interactive embedded R. Whatever the case, I likely over-worried
the consequences of R_Interactive=TRUE; it seems only to matter with
plots, or when there is a segfault (plus whatever user packages might
choose to do differently in response to interactive()).

Thanks to both for the help,

Martin

> On Wed, 21 Feb 2007, Martin Morgan wrote:
>
>> ...at least I think that is what happens, at least on some
>> configurations. Here's a repeatable example:
>>
>> cd R_HOME/tests/Embedding
>> touch tmp.R
>> make tryEval
>>
>> and then (correct)
>>
>>> ./tryEval --slave
>> Error in sqrt("") : Non-numeric argument to mathematical function
>> Caught an error calling sqrt(). Try again with a different argument.
>> [1] 3
>>
>> versus (non-interactive; no return)
>>
>>> ./tryEval --slave < tmp.R
>> Error in sqrt("") : Non-numeric argument to mathematical function
>> Execution halted
>>
>>> echo "sessionInfo()" | R --slave
>> R version 2.5.0 Under development (unstable) (2007-02-21 r40774)
>> x86_64-unknown-linux-gnu
>>
>> locale:
>> LC_CTYPE=en_US;LC_NUMERIC=C;LC_TIME=en_US;LC_COLLATE=en_US;LC_MONETARY=en_US;LC_MESSAGES=en_US;LC_PAPER=en_US;LC_NAME=C;LC_ADDRESS=C;LC_TELEPHONE=C;LC_MEASUREMENT=en_US;LC_IDENTIFICATION=C
>>
>> attached base packages:
>> [1] "stats"     "graphics"  "grDevices" "utils"     "datasets"  "methods"
>> [7] "base"
>>
>
> -- 
> Brian D. Ripley,                  ripley at stats.ox.ac.uk
> Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
> University of Oxford,             Tel:  +44 1865 272861 (self)
> 1 South Parks Road,                     +44 1865 272866 (PA)
> Oxford OX1 3TG, UK                Fax:  +44 1865 272595

-- 
Martin Morgan
Bioconductor / Computational Biology
http://bioconductor.org



[Rd] non-interactive R_tryEval does not return
Martin Morgan