Mario,

On unix if you use Rseve you can pre-load all packages in the server (via eval 
config directive or by running Rserve::run.Rserve() from a session that has 
everything loaded) and all client connections will have the packages already 
loaded and available* immediately. You could replace Rscript call with a very 
tiny Rserve client program which just calls source(""). I can give you more 
details if you're interested.

Cheers,
Simon


* - there are some packages that are inherently incompatible with fork() - e.g. 
you cannot fork Java JVM or open connections.


> On Jul 20, 2020, at 6:47 AM, Mario Annau <mario.an...@gmail.com> wrote:
> 
> Thanks for the quick responses. As you both suggested storing the packages
> to local drive is feasible but comes with a size restriction I wanted to
> avoid. I'll keep this in mind as plan B.
> @Hugh: 2. would impose even greater slowdowns and 4. is just not feasible.
> However, 3. sounds interesting - how would this work in a Linux environment?
> 
> Thank you,
> Mario
> 
> 
> Am So., 19. Juli 2020 um 20:11 Uhr schrieb Hugh Parsonage <
> hugh.parson...@gmail.com>:
> 
>> My advice would be to avoid the network in one of the following ways
>> 
>> 1. Store installed packages on your local drive
>> 2. Copy the installed packages to a tempdir on your local drive each time
>> the script is executed
>> 3. Keep an R session running in perpetuity and source the scripts within
>> that everlasting session
>> 4. Rewrite your scripts to use base R only.
>> 
>> I suspect this solution list is exhaustive.
>> 
>> On Mon, 20 Jul 2020 at 1:50 am, Mario Annau <mario.an...@gmail.com> wrote:
>> 
>>> Dear all,
>>> 
>>> in our current setting we have our packages stored on a (rather slow)
>>> network drive and need to invoke short R scripts (using RScript) in a
>>> timely manner. Most of the script's runtime is spent with package loading
>>> using library() (or loadNamespace to be precise).
>>> 
>>> Is there a way to cache the package namespaces as listed in
>>> loadedNamespaces() and load them into memory before the script is
>>> executed?
>>> 
>>> My first simplistic attempt was to serialize the environment output
>>> from loadNamespace() to a file and load it before the script is started.
>>> However, loading the object automatically also loads all the referenced
>>> namespaces (from the slow network share) which is undesirable for this use
>>> case.
>>> 
>>> Cheers,
>>> Mario
>>> 
>>>        [[alternative HTML version deleted]]
>>> 
>>> ______________________________________________
>>> R-devel@r-project.org mailing list
>>> https://stat.ethz.ch/mailman/listinfo/r-devel
>>> 
>> 
> 
>       [[alternative HTML version deleted]]
> 
> ______________________________________________
> R-devel@r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
> 

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to