As a user I would prefer:

A (classed) error if I ask for something impossible.

A (classed) warning if 'include.only' is handled as 'include' (because I might 
rely on the .only part for some reason and have forgotten that I have already 
attached the namespace).


----- Ursprüngliche Mail -----
> Von: "Kurt Hornik" <kurt.hor...@wu.ac.at>
> An: "Laurent Gatto" <lga...@protonmail.ch>
> CC: "Kurt Hornik" <kurt.hor...@wu.ac.at>, "Trevor Davis" 
> <trevor.l.da...@gmail.com>, r-devel@r-project.org, "roland
> fuss" <roland.f...@thuenen.de>
> Gesendet: Dienstag, 3. Juni 2025 19:23:01
> Betreff: Re: [Rd] FR: improve "use" function

>>>>>> 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

-- 
Thünen-Institut für Agrarklimaschutz/
Thünen Institute of Climate-Smart Agriculture

Bundesallee 65
D-38116 Braunschweig, Germany

Tel./Webex: +49 531 25701967

Email: roland.f...@thuenen.de

Arbeitsgruppe "Emissionsberichterstattung"/
Working group "Emission Inventories"
Email: emissionsinvent...@thuenen.de

Das Johann Heinrich von Thünen-Institut, 
Bundesforschungsinstitut für Ländliche Räume, 
Wald und Fischerei – kurz: Thünen-Institut – 
besteht aus 15 Fachinstituten, die über 
sozioökonomische, ökologische und technologische 
Kompetenz verfügen. Das Thünen-Institut betreibt 
Forschung und Politikberatung mit Bezug zu 
ländlichen Räumen, Landwirtschaft, Wald und Fischerei.

The Johann Heinrich von Thünen Institute, 
Federal Research Institute for Rural Areas, 
Forestry and Fisheries – Thünen Institute 
in brief – consists of 15 specialized 
institutes with socioeconomic, ecological 
and technological expertise. The Thünen 
Institute conducts research and policy advice 
related to rural areas, agriculture, forests 
and fisheries.

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

Reply via email to