>>>>> Laurent Gatto writes:

Thanks.

In general, I guess we all agree that if 'include.only' or 'exclude' ask
for something (currently) impossible then a suitably classed condition
object should be thrown.  Could be both a warning or an error ...

And perhaps we should take 'include.only' as 'include', i.e., be fine
when we give 'include.only' as a subset of what is already included.

Personally, I am not a big fan of suggesting to use detach() in the
condition message.

Best
-k

> On Tuesday, May 27th, 2025 at 9:13 AM, Kurt Hornik <kurt.hor...@wu.ac.at> 
> wrote:
>> > > > > > Trevor Davis writes:
>> 
>> 
>> Thanks.
>> 
>> This is really about what
>> 
>> library("foo", include.only = "fun2")
>> 
>> should do if package 'foo' was already attached and the include.only
>> contradicts a previous specification.
>> 
>> In principle, one could look into allowing the underlying
>> attachNamespace() to add more exports into the package environment (the
>> 'only' in 'include.only' might suggest differently, but we would have to
>> live with that). However, using detach/attach is not the right way of
>> doing this, as it possibly modifies the search path and may trigger
>> hooks that should not be triggered. Doing it right would probably need
>> an .Internal and hence be a lot of work ...
>> 
>> What definitely needs attention is the fact that currently the above is
>> silently ignored. So at least for now we should teach attachNamespace()
>> to throw a suitably classed error if called with include.only that
>> contradicts a previous specification.
>> 
>> Contributions welcome :-)

> Some work has been done on that front during last week's r-dev-day
> with Ella Kaye and Philippe Grosjean [1]. After some more thinking, I
> think we haven't been stringent enough, and would suggest that the
> user should be alerted as soon as what they want to attach doesn't
> match exactly what is already on the search path. Something along the
> lines of (the warning/message can of course be amended).

> These two situations are OK, given that exactly the same set is asked
> for repeated, either with a limited set of functions:

>> library("Matrix", include.only = "isDiagonal")
>> library("Matrix", include.only = "isDiagonal") ## ok

> or, in a new session, with the whole package:

>> library("Matrix", include.only = "isDiagonal")
>> library("Matrix", include.only = "isDiagonal") ## ok

> Below, (again, in a new session) the user could be mislead that either
> only qr would be attached (and isDiagonal not anymore), or all
> Matrix's exported symbols:

>> library("Matrix", include.only = "isDiagonal")
>> library("Matrix", include.only = "qr") ## warn
> Warning message:
> In library("Matrix", include.only = "qr") :
>   The package 'Matrix' is already loaded with a different set of functions. 
> Please detach() it first.
>> library("Matrix") ## warn
> Warning message:
> In library("Matrix") :
>   The package 'Matrix' is already loaded with a different set of functions. 
> Please detach() it first.

> In the following cases, a subset is asked after all symbols are
> attached, which also triggers a warning/message:

>> library("Matrix")
>> library("Matrix", exclude = "isDiagonal") ## warn
> Warning message:
> In library("Matrix", exclude = "isDiagonal") :
>   The package 'Matrix' is already loaded with a different set of functions. 
> Please detach() it first.
>> library("Matrix", include.only = "isDiagonal") ## warn
> Warning message:
> In library("Matrix", include.only = "isDiagonal") :
>   The package 'Matrix' is already loaded with a different set of functions. 
> Please detach() it first.

> If this is a good way forward, I would be happy to carry on that work.

> Laurent


> [1] https://github.com/r-devel/r-dev-day/issues/48

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

Reply via email to