[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