[R] R script to start session (without automatically finishing)

Prof Brian Ripley ripley at stats.ox.ac.uk
Fri Jan 4 10:48:03 CET 2008


I suggest you consult the source code, specifically src/unix/system.c and 
src/unix/sys-std.c.

interactive() reports the value of the C-level variable R_Interactive, and 
standard Unix-alike R runs an event loop only if that is true.  I suspect 
RGL is relying on that event loop, but reading its sources will confirm 
how it gets interactivity.

If you want to embed R in a Perl script, there are better ways to do it, 
and setting interactivity is part of the embedding API.  So I don't know 
how e.g. Rserve or RSPerl handles it.

On Fri, 4 Jan 2008, Philipp Fechteler wrote:

> Hello again
>
> I think now I can refine my problem: I want to run R scripts 
> non-interactively in batch-mode or invoked in Perl scripts, with interactive 
> rgl windows (responding to my mouse actions). Ideally the R script finishes 
> when I close the rgl window and executes some last commands in the R script.
>
> When R is started non-interactively, by using Rscript or (in Linux) piping 
> the input to the R process STDIN, then the rgl windows are not interactive. 
> The only difference in the R environment I can find is, that the command 
> interactive() returns TRUE only, when I have invoked R on the command line. 
> In all other cases I have tried, this command returns FALSE.
>
> Does anybody now, how this interactive() function is working? In which way 
> does it determine if R is running interactively or in batch mode? And how can 
> I modify that behaviour or how can I simulate the interactive environment 
> from a (Perl-) script calling my R script?
>
> Here is my Perl script approach for running R non-interacively, but 
> non-successful simulating an interactive environment:
>
> use warnings;
> use strict;
> use English;
> use IPC::Open2;
>
> my @rScript =
> (
>  "library(rgl)\n",
>  "rgl.open()\n",
>  "rgl.bg(color=c(\"white\"))\n",
>  "rgl.lines(  c(0, 1, 1, 1, 1, 0, 0, 0),
>      c(0, 0, 0, 1, 1, 1, 1, 0),
>      c(0, 0, 0, 0, 0, 0, 0, 0),
>      color=\"black\", size=2 )\n",
>  "rgl.lines(  c(0, 1, 1, 1, 1, 0, 0, 0),
>      c(0, 0, 0, 1, 1, 1, 1, 0),
>      c(1),
>      color=\"black\", size=2 )\n",
>  "rgl.lines(
>      c(0, 0, 1, 1, 1, 1, 0, 0),
>      c(0, 0, 1, 1, 0, 0, 1, 1),
>      c(0, 1, 0, 1, 0, 1, 0, 1),
>      color=\"black\", size=2 )\n"
> );
>
>
> my $pid = open2( ">&STDOUT", my $R, "/usr/bin/R", 
> "--slave","--quiet","--vanilla")
>  or die "ERROR: can't open2 R: $ERRNO";
> print $R @rScript;
> getc();
> print $R "q()\n";
>
>
>
> Thank's for help.
>
> Greetings
> Philipp
>
>
>
>
>
> Prof Brian Ripley wrote:
>> On Thu, 3 Jan 2008, Philipp Fechteler wrote:
>> 
>>> Hello Mr Ripley
>>> 
>>> Prof Brian Ripley wrote:
>>>> So you have to write a script that will not terminate until you 'press a 
>>>> button or something like this'.  That's easy to do, but as you haven't 
>>>> told us your OS.  E.g. on Windows, call winDialogString at the end.
>>>> 
>>> 
>>> Thank you for helping. I am running on Linux. But I think the getchar() 
>>> like call should be inside the R script. So is there something like this 
>>> in R or any loadable module, e.g. a function sleeping until a key is 
>>> pressed and returning the key code?
>> 
>> See ?readline, and from Rscript scan("stdin", "", n=1).
>> 
>
> The scan() function is quite near on my desired solution. But it
> inhabits the following problem. The rgl window pops up showing the data
> I want to see, but its frozen (due to the following scan() call). So I
> successfully see the data visualization as long as I want, but its a
> static view, the mouse-interactivity is lost (changing the viewing
> angle, zoom etc.).
>
>> 
>> You can't do this totally portably: R might not be connected to a terminal 
>> (even in interactive use: think ESS). You could also use a Tk widget to 
>> give your users a button to press.
>> 
>
> Is there anywere a short tutorial, how to mix R scripts with Tk?
>
> But the best would be to change the upper approach, so that the rgl
> window just keeps its interactivity.
>
> Thank you.
> Philipp
>
>
>
>>> 
>>> 
>>> Greetings
>>> Philipp
>>> 
>>> 
>>>> On Fri, 21 Dec 2007, Philipp Fechteler wrote:
>>>> 
>>>>> Hello R friends
>>>>> 
>>>>> I am quite impressed by the power of R, I am using it only since some
>>>>> weeks now. But its visualizing capabilities are outstanding!
>>>>> 
>>>>> But one thing I couldn't solve: I have programs producing lots of data,
>>>>> most times 3D. In R I am using the library rgl to visualize nicely the
>>>>> 3D data.
>>>>> 
>>>>> What I would like to do is to write R scipts which read in a data file
>>>>> and show me the 3D rgl plot. So that on the command line I just call my
>>>>> newly written R script, which pops up the rgl window. This session
>>>>> should run until I close the rgl window or press a button or something
>>>>> like this.
>>>>> 
>>>>> Currently, I can write R scripts
>>>>> - using Rscript or
>>>>> - http://tolstoy.newcastle.edu.au/R/help/04/05/0500.html
>>>>> But both approaches contain the problem that the rgl window pops up for
>>>>> just a moment, and then the program terminates.
>>>>> 
>>>>> 
>>>>> Does any body has an idea, what to do? Help would be very appreciated.
>>>>> 
>>>>> Thank's a lot and ... Marry Christmas + Happy New Year
>>>>> 
>>>>> Philipp
>>>>> 
>>>>> 
>>>>> ________________________________________________________________________ 
>>>>> Dipl.-Ing. Philipp Fechteler
>>>>> Department Image Processing
>>>>> Fraunhofer Institute for Telecommunications
>>>>> Heinrich-Hertz-Institut (HHI)
>>>>> Einsteinufer 37
>>>>> 10587 Berlin, Germany
>>>>> Phone    +49 30 31002 616
>>>>> Fax    +49 30 392 72 00
>>>>> Email    philipp.fechteler at hhi.fraunhofer.de
>>>>> WWW    http://iphome.hhi.de/fechteler
>>>>> ________________________________________________________________________ 
>>>> 
>>>> 
>>> 
>>> 
>>> 
>> 
>
>
>

-- 
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




More information about the R-help mailing list