how to run R as a daemon
On Mon, 19 May 2003, Laurent Faisnel wrote:
Prof Brian Ripley wrote:
On Mon, 19 May 2003, Laurent Faisnel wrote:
I just visited the link you gave me. One of the problems that could occur using NuSOAP is that I do not intend using Python. Thanks anyway. I would also like to ask more precise questions :
`more precise'? At least some of the inefficiencies are emerging, but I still have little picture of what you are actually trying to do. It ought to be possible to run a new R session in a well under a second (on a 1+GHz machine): gannet% time env R_DEFAULT_PACKAGES=NULL R --vanilla --slave < /dev/null 0.203u 0.039s 0:00.27 85.1% 0+0k 0+0io 1220pf+0w
I don't understand how you made this test. What does "gannet%" mean?
A totally standard Unix prompt: machine_name% is the default prompt in csh.
Anyway, when I launch R with these options (--vanilla and --slave), it is fast enough.
for example (on a dual Athlon 2600, R 1.7.0).
- is it possible to run R as a standalone service, which runs in background indefinitely, waiting for instructions ?
It is, but waiting for instructions from one place (stdin or on a socket).
This is a good piece of news. But how ?
There is some danger of different jobs sent leaving things behind that will cause interactions.
I 'll make some tests about possible interactions if I successfully launch R in such a mode.
This would be a great improvement for me, since each time it is launched R has to re-load a (constant) matrix generated thanks to a database connection (takes a very long while)
You could just save and then load that matrix in your .RData
Seems to be a good idea. I'm not used to edit my .RData but sure it would be an improvement. I had not even thought about it.
- my R script is object-oriented; I define classes and methods, but I'm
not so sure about how methods should be declared; I usually write
something like :
mymethod <- function(.Object) UseMethod("mymethod",.Object);
setMethod("mymethod","myclass",
function(.Object)
{
# instructions
return(.Object);
}
);
Perhaps is this not the best way to write methods ? Could this explain
the following fact : when I run the script, R spends about 1/3 of its
thinking time creating the generic functions linked with my methods.
Isn't this wasted time ? The same script may be executed many times
consecutively by different users, and each time R has to re-define the
generic functions ! (are always the same)
Yes, but it is your usage that is the problem. You are mixing S3 and S4 methods (where did you copy an example like that from?). You should dump your scripts if you use S4 methods (which I don't think you should be doing in such simple examples, nor if you care about speed): see the examples of S4-using packages on CRAN (e.g. DBI, SparseM).
I clearly prefer using S3 classes & methods. I knew S4 classes would cause slowness problems. But I did not find a clear documentation about differences between S3 and S4. Neither did I find detailed tutorials about R programming. Which part of my code structure is S3-like and which one is S4-like ? Is the above-mentionned problem S4 classes' fault ? You mean with clean S3 scripts I would have none of these drawbacks ?
There's a book called `S Programming' that has all this crystal clear, and it is in the FAQ!
Also consider upgrading to R 1.7.0 and setting R_DEFAULT_PACKAGES to what you actually need (and omit methods if you don't need it)
I won't use R 1.7.0 for the time. First everything has to work fine with R 1.6.2. I think I have few things in R_DEFAULT_PACKAGES, and I cannot omit methods because I use them all !
That's the `methods' package, only needed for S4 methods.
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