[Rd] Imports, importFrom slow (for Matrix)

Gábor Csárdi csardi.gabor at gmail.com
Tue Oct 29 15:31:14 CET 2013


Oh, you mean to put Matrix:: in the functions that need Matrix, right,
of course. Then yes, this could be a solution. I have some issue with
some new class definitions, but I can probably work them out.

Gabor

On Tue, Oct 29, 2013 at 10:25 AM, Gábor Csárdi <csardi.gabor at gmail.com> wrote:
> Unfortunately that seems to be (almost) just as slow.
>
> ~$ time Rscript -e 'Matrix::summary; ls()' > /dev/null
> real 0m2.785s
> user 0m2.668s
> sys 0m0.112s
>
> Gabor
>
> On Tue, Oct 29, 2013 at 10:11 AM, Prof Brian Ripley
> <ripley at stats.ox.ac.uk> wrote:
>> On 29/10/2013 14:03, Gábor Csárdi wrote:
>>>
>>> Dear All,
>>>
>>> before its latest version my package had 'Imports: Matrix' in its
>>> DESCRIPTION file, but it did not import anything in NAMESPACE. Rather,
>>> some functions explicitly loaded Matrix, as they needed. The reason
>>> for this was that importing Matrix is really slow, and only very few
>>> igraph functions need it. (I guess Matrix is slow because of the many
>>> registered names, but that is another question.)
>>>
>>> # Empty session:
>>> ~$ time Rscript -e 'ls()' > /dev/null
>>> real 0m0.251s
>>> user 0m0.196s
>>> sys 0m0.049s
>>>
>>> # Without importing from Matrix:
>>> ~$ time Rscript -e 'library(igraph); ls()' > /dev/null
>>> Loading required package: methods
>>> real 0m0.419s
>>> user 0m0.363s
>>> sys 0m0.049s
>>>
>>> # Adding importFrom(Matrix, sparseMatrix) to NAMESPACE:
>>> ~$ time Rscript -e 'library(igraph); ls()' > /dev/null
>>> Loading required package: methods
>>> real 0m2.963s
>>> user 0m2.844s
>>> sys 0m0.115s
>>>
>>> This solution was fine with me, especially because other packages
>>> depending on igraph and using Matrix through igraph worked fine on the
>>> CRAN build servers, as igraph brought Matrix with it. (The build
>>> servers don't have recommended packages like Matrix available by
>>> default.)
>>>
>>> Recently, R CMD check does not allow me to list Matrix at Imports
>>> without importing something from it. This is understandable, because
>>> it is an inconsistency after all, but caused some headache for me.
>>>
>>> A 3s loading time for a package is IMHO much longer than ideal,
>>> especially that loading R itself is ten times faster. So I definitely
>>> don't want to import from Matrix right now.
>>>
>>> The solution I settled with was to include Matrix in 'Suggests', and
>>> the load it selectively, as before. Now some packages depending on
>>> igraph are failing on the CRAN build servers, which don't have Matrix
>>> installed for these packages. (Luckily they are probably not failing
>>> for users, because most users do have the recommended packages.)
>>>
>>> In summary, it would be great to speed up imports.
>>>
>>> Another solution would be some mechanism that allows me to import from
>>> a package as needed, not at the package loading time. Something like a
>>> delayed importFrom().
>>
>>
>> That is what Matrix:: does.  There is nothing like enough here for us to
>> tell why it would not suffice for you.  (If you want to import something
>> occasionally and then use it very many times, make a local copy.)
>>
>>>
>>> Just wanted to bring up this issue.
>>>
>>> Best,
>>> Gabor
>>>
>>> ______________________________________________
>>> R-devel at r-project.org mailing list
>>> https://stat.ethz.ch/mailman/listinfo/r-devel
>>>
>>
>>
>> --
>> 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
>>
>> ______________________________________________
>> R-devel at r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-devel



More information about the R-devel mailing list