[Bioc-devel] namespace question

Hervé Pagès hpages at fredhutch.org
Sat Apr 2 01:14:47 CEST 2016


On 04/01/2016 01:39 PM, Michael Lawrence wrote:
> Yes, it's arbitrary R code that is evaluated, so paste0() would work.
> You're right that it's a big door and could let people do weird
> things. Do you foresee a problem with that?

Opening such a big door raises many questions. In addition to allowing
people do weird/crazy things (like putting calls to library()
or requireNamespace() etc... in them), NAMESPACE files with arbitrary
R code in them become more complicated to maintain and the tools for
parsing/processing them also become more complicated to write and
maintain.

Now we have a new category of errors that can happen at package
installation time: errors triggered by the evaluation of the R
expressions embedded in the NAMESPACE file. Hopefully 'R CMD INSTALL'
will report something that can be understood by mere mortals when this
happens.

Once you create the feeling that a NAMESPACE file is just a file
that contains arbitrary R code then people expect import(), export()
etc.. to be ordinary R functions with a man page (being able to do
?import would not hurt actually) and they'll naturally try to do
things like

   unwanted_foo_symbols <- ... long and complicated expression
                               eventually calling user-defined helper
                               functions located in the NAMESPACE file ...
   import(foo, except=unwanted_foo_symbols)

Can't blame them for that. But is this the kind of things that we're
ready to see in NAMESPACE files?

Also once you've open that door, people will naturally wonder why they
can use an R expression in the 'except' part of import( , except=) but
not elsewhere e.g. in

   import(foo, only=paste0("bar", 1:10))

as a more elegant way of doing importFrom(foo, bar1, bar2, ..., bar10).
This dissymmetry between the syntax of "import only this" and "import
all except this" feels very arbitrary. If you don't support the
import( , only=) syntax, people might legitimately ask things like

   do.call(importFrom, c(list("foo"), as.list(paste0("bar", 1:10))))

to work. Again, can't blame them for that. But do we want this kind of
things to work? I'm worried debugging NAMESPACE files would become a
full-time job...

> I guess one could have implemented NAMESPACE parsing by evaluating the
> code in an environment (inheriting from the base namespace) where
> import(), export(), etc, were defined. Maybe there's a good reason why
> it was not implemented that way.

I'm sure there is ;-)

H.

>
> On Fri, Apr 1, 2016 at 12:55 PM, Hervé Pagès <hpages at fredhutch.org> wrote:
>> On 03/31/2016 04:07 PM, Michael Lawrence wrote:
>>>
>>> I agree. The importExcept idea also works that way: importExcept(foo, bar,
>>> baz)
>>>
>>> But import(foo, except=c(bar, baz)) reads better.
>>
>>
>> mmh... so R expressions with calls to base functions like base::c() are
>> making their way in the NAMESPACE file. That's opening a big door. Does
>> that mean that we'll be able to do things like:
>>
>> import(foo, except=paste0("bar", 1:10))
>>
>> Or maybe c(bar, baz) in your above example is just an arbitrary syntax
>> that just happens to look like an R expression but won't be evaluated
>> as such?
>>
>>
>> H.
>>
>>>
>>>
>>> On Thu, Mar 31, 2016 at 4:00 PM,  <luke-tierney at uiowa.edu> wrote:
>>>>
>>>> I don't think you want to separate it from the import. Better to allow
>>>> something like
>>>>
>>>> import(foo, exclude=bar)
>>>>
>>>> or
>>>>
>>>> import(foo, exclude=c("bar", "baz"))
>>>>
>>>> This seems reasonably natural and shouldn't be too hard to
>>>> implement. (But is has been a while since I've worked on this code).
>>>>
>>>> Best,
>>>>
>>>> luke
>>>>
>>>>
>>>> On Thu, 31 Mar 2016, Karim Mezhoud wrote:
>>>>
>>>>> I think "From" is needed to specify which package we want to exlude
>>>>> functions.
>>>>>
>>>>> I think  excludeFrom (package, function)  seems to be intuitive.
>>>>>
>>>>> thanks,
>>>>> Karim
>>>>>
>>>>>
>>>>>
>>>>> On Thu, Mar 31, 2016 at 9:54 PM, Hervé Pagès <hpages at fredhutch.org>
>>>>> wrote:
>>>>>
>>>>>> On 03/31/2016 12:55 PM, Michael Lawrence wrote:
>>>>>>
>>>>>>> Probably should just stick to exact symbols for now. If there is a
>>>>>>> case where a pattern is actually useful, rather than just an
>>>>>>> obfuscation, we can extend the feature set.
>>>>>>>
>>>>>>
>>>>>> Fair enough. Not really intuitive that excludeImport uses the same
>>>>>> syntax as (but does the opposite of) importFrom though. Maybe having
>>>>>> the name of the directive start with "import" would help e.g.
>>>>>>
>>>>>> importExcept(hash, values)  # opposite of importFrom(hash, values)
>>>>>>
>>>>>> Thanks,
>>>>>> H.
>>>>>>
>>>>>>
>>>>>>
>>>>>>> On Thu, Mar 31, 2016 at 12:11 PM, Zhu, Lihua (Julie)
>>>>>>> <Julie.Zhu at umassmed.edu> wrote:
>>>>>>>
>>>>>>>> Herve,
>>>>>>>>
>>>>>>>> That is a very interesting idea and works for me! Thanks!
>>>>>>>>
>>>>>>>> importPatternFrom(IRanges, "^values$")
>>>>>>>>
>>>>>>>>
>>>>>>>> Best,
>>>>>>>>
>>>>>>>> Julie
>>>>>>>>
>>>>>>>> On 3/31/16 2:51 PM, "Bioc-devel on behalf of Hervé Pagès"
>>>>>>>> <bioc-devel-bounces at r-project.org on behalf of hpages at fredhutch.org>
>>>>>>>> wrote:
>>>>>>>>
>>>>>>>> On 03/30/2016 08:35 PM, Michael Lawrence wrote:
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>> That would work, but R is not going to be happy about redundant
>>>>>>>>>> imports. Interactively, users would balk at symbol qualification.
>>>>>>>>>>
>>>>>>>>>> There are two classes of conflict:
>>>>>>>>>> 1) Same semantics, where a common generic would arbitrate, or one
>>>>>>>>>> package could depend on the other, and
>>>>>>>>>> 2) Different semantics, in which case one of the functions should
>>>>>>>>>> probably be renamed, although that might not be practical or easy
>>>>>>>>>> to
>>>>>>>>>> agree upon.
>>>>>>>>>>
>>>>>>>>>> When those approaches fail, qualification is the only recourse.
>>>>>>>>>>
>>>>>>>>>> I will think about adding an excludeImport() or importAs().
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>> What about having something like an importPatternFrom() directive
>>>>>>>>> similar to the exportPattern() directive and have these directives
>>>>>>>>> support some of the grep() toggles like 'ignore.case', 'fixed',
>>>>>>>>> 'invert' etc... ?
>>>>>>>>>
>>>>>>>>> Then Julie could just do:
>>>>>>>>>
>>>>>>>>> importPatternFrom(hash, "^values$", invert=TRUE)
>>>>>>>>>
>>>>>>>>> H.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> On Wed, Mar 30, 2016 at 8:20 PM, Robert M. Flight
>>>>>>>>>> <rflight79 at gmail.com
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>> wrote:
>>>>>>>>>>
>>>>>>>>>>> In the cases of having conflicting names, is it not appropriate
>>>>>>>>>>> then
>>>>>>>>>>> to use
>>>>>>>>>>> the "package::function" form for calling a particular function?
>>>>>>>>>>>
>>>>>>>>>>> On Wed, Mar 30, 2016 at 11:14 PM Michael Lawrence
>>>>>>>>>>> <lawrence.michael at gene.com>
>>>>>>>>>>> wrote:
>>>>>>>>>>>
>>>>>>>>>>> I can't find the hash function in IRanges. Are you sure it has
>>>>>>>>>>> one?
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> On Wed, Mar 30, 2016 at 8:07 PM, Zhu, Lihua (Julie)
>>>>>>>>>>>> <Julie.Zhu at umassmed.edu> wrote:
>>>>>>>>>>>>
>>>>>>>>>>>>> Michael,
>>>>>>>>>>>>>
>>>>>>>>>>>>> I have the same user case as Kasper. Another example is that
>>>>>>>>>>>>> both
>>>>>>>>>>>>> IRanges
>>>>>>>>>>>>> and hash packages have hash. I need to use the hash from the
>>>>>>>>>>>>> hash
>>>>>>>>>>>>> package
>>>>>>>>>>>>> instead of the one from IRanges.
>>>>>>>>>>>>>
>>>>>>>>>>>>> Best,
>>>>>>>>>>>>>
>>>>>>>>>>>>> Julie
>>>>>>>>>>>>>
>>>>>>>>>>>>> On Mar 30, 2016, at 7:57 PM, Kasper Daniel Hansen
>>>>>>>>>>>>> <kasperdanielhansen at gmail.com> wrote:
>>>>>>>>>>>>>
>>>>>>>>>>>>> My usecase is when I import() two packages who has a conflict in
>>>>>>>>>>>>> a
>>>>>>>>>>>>> name.
>>>>>>>>>>>>> For example, both Biobase and matrixStats has both anyMissing
>>>>>>>>>>>>> and
>>>>>>>>>>>>> rowMedians. I am happy to get all of these two packages, but I
>>>>>>>>>>>>> need
>>>>>>>>>>>>> to
>>>>>>>>>>>>> resolve the conflict.  Since I want to keep the ones from
>>>>>>>>>>>>> matrixStats I
>>>>>>>>>>>>>
>>>>>>>>>>>> know
>>>>>>>>>>>>
>>>>>>>>>>>>> need to figure out how to import Biobase selectively.  Which I
>>>>>>>>>>>>> can,
>>>>>>>>>>>>> using
>>>>>>>>>>>>> the tools from codetoolsBioC, but I would also be happy with an
>>>>>>>>>>>>> importFromExcept(), which would make my life much easier.
>>>>>>>>>>>>>
>>>>>>>>>>>>> Best,
>>>>>>>>>>>>> Kasper
>>>>>>>>>>>>>
>>>>>>>>>>>>> On Wed, Mar 30, 2016 at 4:47 PM, Michael Lawrence
>>>>>>>>>>>>> <lawrence.michael at gene.com> wrote:
>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> I'm curious about which symbols you wouldn't want to import,
>>>>>>>>>>>>>> and
>>>>>>>>>>>>>> why.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> On Wed, Mar 30, 2016 at 12:19 PM, Zhu, Lihua (Julie)
>>>>>>>>>>>>>> <Julie.Zhu at umassmed.edu> wrote:
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Hi,
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Is there a function to import all the exported objects from a
>>>>>>>>>>>>>>> package
>>>>>>>>>>>>>>> except a few named ones in NAMESPACE file?
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> For example, I would like to import all the functions in
>>>>>>>>>>>>>>> S4Vectors
>>>>>>>>>>>>>>> except fold. Is there a way to  specify this without listing
>>>>>>>>>>>>>>> all
>>>>>>>>>>>>>>> other
>>>>>>>>>>>>>>> functions using importFrom?
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Many thanks for your help!
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Best regards,
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Julie
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> ********************************************
>>>>>>>>>>>>>>> Lihua Julie Zhu, Ph.D
>>>>>>>>>>>>>>> Research Professor
>>>>>>>>>>>>>>> Department of Molecular, Cell and Cancer Biology (MCCB)
>>>>>>>>>>>>>>> Head of MCCB Bioinformatics Core
>>>>>>>>>>>>>>> Program in Molecular Medicine
>>>>>>>>>>>>>>> Program in Bioinformatics and Integrative Biology
>>>>>>>>>>>>>>> University of Massachusetts Medical School
>>>>>>>>>>>>>>> 364 Plantation Street, Room 613
>>>>>>>>>>>>>>> Worcester, MA 01605
>>>>>>>>>>>>>>> 508-856-5256 phone
>>>>>>>>>>>>>>> (508) 856 5460 fax
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> http://profiles.umassmed.edu/profiles/ProfileDetails.aspx?From=SE&Perso
>>>>>>>>>>>> n=1134
>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>             [[alternative HTML version deleted]]
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>>>>> Bioc-devel at r-project.org mailing list
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> https://urldefense.proofpoint.com/v2/url?u=https-3A__stat.ethz.ch_ma
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> ilman_listinfo_bioc-2Ddevel&d=BQIF-g&c=WJBj9sUF1mbpVIAf3biu3CPHX4MeR
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> jY_w4DerPlOmhQ&r=3IbW-yoIQpGZOKgd4i2bgmPHhwHHF5gJMlij5cC5bLU&m=Rxzbh
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> vEdYoq-VrN42rfiK5-UIIwjUIHLTQjy9s7-pzs&s=TmgPkRkAcsTjcIVvzaBFADs-tx8
>>>>>>>>>>>>>>> CzeHHAAJ5kmgmJxQ&e=
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>>>> Bioc-devel at r-project.org mailing list
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> https://urldefense.proofpoint.com/v2/url?u=https-3A__stat.ethz.ch_mai
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> lman_listinfo_bioc-2Ddevel&d=BQIF-g&c=WJBj9sUF1mbpVIAf3biu3CPHX4MeRjY
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> _w4DerPlOmhQ&r=3IbW-yoIQpGZOKgd4i2bgmPHhwHHF5gJMlij5cC5bLU&m=RxzbhvEd
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Yoq-VrN42rfiK5-UIIwjUIHLTQjy9s7-pzs&s=TmgPkRkAcsTjcIVvzaBFADs-tx8CzeH
>>>>>>>>>>>>>> HAAJ5kmgmJxQ&e=
>>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>> Bioc-devel at r-project.org mailing list
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> https://urldefense.proofpoint.com/v2/url?u=https-3A__stat.ethz.ch_mailm
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> an_listinfo_bioc-2Ddevel&d=BQIF-g&c=WJBj9sUF1mbpVIAf3biu3CPHX4MeRjY_w4D
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> erPlOmhQ&r=3IbW-yoIQpGZOKgd4i2bgmPHhwHHF5gJMlij5cC5bLU&m=RxzbhvEdYoq-Vr
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> N42rfiK5-UIIwjUIHLTQjy9s7-pzs&s=TmgPkRkAcsTjcIVvzaBFADs-tx8CzeHHAAJ5kmg
>>>>>>>>>>>> mJxQ&e=
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>             [[alternative HTML version deleted]]
>>>>>>>>>>>
>>>>>>>>>>> _______________________________________________
>>>>>>>>>>> Bioc-devel at r-project.org mailing list
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> https://urldefense.proofpoint.com/v2/url?u=https-3A__stat.ethz.ch_mailma
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> n_listinfo_bioc-2Ddevel&d=BQIF-g&c=WJBj9sUF1mbpVIAf3biu3CPHX4MeRjY_w4Der
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> PlOmhQ&r=3IbW-yoIQpGZOKgd4i2bgmPHhwHHF5gJMlij5cC5bLU&m=RxzbhvEdYoq-VrN42
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> rfiK5-UIIwjUIHLTQjy9s7-pzs&s=TmgPkRkAcsTjcIVvzaBFADs-tx8CzeHHAAJ5kmgmJxQ
>>>>>>>>>>> &e=
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> _______________________________________________
>>>>>>>>>> Bioc-devel at r-project.org mailing list
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> https://urldefense.proofpoint.com/v2/url?u=https-3A__stat.ethz.ch_mailman
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> _listinfo_bioc-2Ddevel&d=BQIF-g&c=WJBj9sUF1mbpVIAf3biu3CPHX4MeRjY_w4DerPl
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> OmhQ&r=3IbW-yoIQpGZOKgd4i2bgmPHhwHHF5gJMlij5cC5bLU&m=RxzbhvEdYoq-VrN42rfi
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> K5-UIIwjUIHLTQjy9s7-pzs&s=TmgPkRkAcsTjcIVvzaBFADs-tx8CzeHHAAJ5kmgmJxQ&e=
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>> --
>>>>>>>>> Hervé Pagès
>>>>>>>>>
>>>>>>>>> Program in Computational Biology
>>>>>>>>> Division of Public Health Sciences
>>>>>>>>> Fred Hutchinson Cancer Research Center
>>>>>>>>> 1100 Fairview Ave. N, M1-B514
>>>>>>>>> P.O. Box 19024
>>>>>>>>> Seattle, WA 98109-1024
>>>>>>>>>
>>>>>>>>> E-mail: hpages at fredhutch.org
>>>>>>>>> Phone:  (206) 667-5791
>>>>>>>>> Fax:    (206) 667-1319
>>>>>>>>>
>>>>>>>>> _______________________________________________
>>>>>>>>> Bioc-devel at r-project.org mailing list
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> https://urldefense.proofpoint.com/v2/url?u=https-3A__stat.ethz.ch_mailman_
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> listinfo_bioc-2Ddevel&d=BQIF-g&c=WJBj9sUF1mbpVIAf3biu3CPHX4MeRjY_w4DerPlOm
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> hQ&r=3IbW-yoIQpGZOKgd4i2bgmPHhwHHF5gJMlij5cC5bLU&m=RxzbhvEdYoq-VrN42rfiK5-
>>>>>>>>>
>>>>>>>>> UIIwjUIHLTQjy9s7-pzs&s=TmgPkRkAcsTjcIVvzaBFADs-tx8CzeHHAAJ5kmgmJxQ&e=
>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>> --
>>>>>> Hervé Pagès
>>>>>>
>>>>>> Program in Computational Biology
>>>>>> Division of Public Health Sciences
>>>>>> Fred Hutchinson Cancer Research Center
>>>>>> 1100 Fairview Ave. N, M1-B514
>>>>>> P.O. Box 19024
>>>>>> Seattle, WA 98109-1024
>>>>>>
>>>>>> E-mail: hpages at fredhutch.org
>>>>>> Phone:  (206) 667-5791
>>>>>> Fax:    (206) 667-1319
>>>>>>
>>>>>> _______________________________________________
>>>>>> Bioc-devel at r-project.org mailing list
>>>>>> https://stat.ethz.ch/mailman/listinfo/bioc-devel
>>>>>
>>>>>
>>>>>
>>>>>           [[alternative HTML version deleted]]
>>>>>
>>>>> _______________________________________________
>>>>> Bioc-devel at r-project.org mailing list
>>>>> https://stat.ethz.ch/mailman/listinfo/bioc-devel
>>>>
>>>>
>>>>
>>>> --
>>>> Luke Tierney
>>>> Ralph E. Wareham Professor of Mathematical Sciences
>>>> University of Iowa                  Phone:             319-335-3386
>>>> Department of Statistics and        Fax:               319-335-3017
>>>>      Actuarial Science
>>>> 241 Schaeffer Hall                  email:   luke-tierney at uiowa.edu
>>>> Iowa City, IA 52242                 WWW:  http://www.stat.uiowa.edu
>>
>>
>> --
>> Hervé Pagès
>>
>> Program in Computational Biology
>> Division of Public Health Sciences
>> Fred Hutchinson Cancer Research Center
>> 1100 Fairview Ave. N, M1-B514
>> P.O. Box 19024
>> Seattle, WA 98109-1024
>>
>> E-mail: hpages at fredhutch.org
>> Phone:  (206) 667-5791
>> Fax:    (206) 667-1319

-- 
Hervé Pagès

Program in Computational Biology
Division of Public Health Sciences
Fred Hutchinson Cancer Research Center
1100 Fairview Ave. N, M1-B514
P.O. Box 19024
Seattle, WA 98109-1024

E-mail: hpages at fredhutch.org
Phone:  (206) 667-5791
Fax:    (206) 667-1319



More information about the Bioc-devel mailing list