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 [EMAIL PROTECTED] >>>>> WWW http://iphome.hhi.de/fechteler >>>>> ________________________________________________________________________ >>>> >>>> >>> >>> >>> >> > > > -- Brian D. Ripley, [EMAIL PROTECTED] 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 ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.