On 07/11/2012 17:52, mauricio zambrano wrote:
On 11/07/12, Simon Urbanek <simon.urba...@r-project.org> wrote:
On Nov 7, 2012, at 9:25 AM, Simon Urbanek wrote:
On Nov 7, 2012, at 4:04 AM, Mauricio Zambrano-Bigiarini wrote:
Dear R developers,
Taking advantage of the yesterday discussion about the use of
Depends/Import/Suggests/Enhances, I would like to add a related
question.
Let's assume, in the DESCRIPTION file of my package foo0, I
have:
Depends: foo1 Imports: foo2
while in the NAMESPACE file of my package I have
importFrom("foo2", f2)
and within my package I use the following two external
functions:
f1, from package foo1 f2, from package foo2
If I want to use the two previous functions within a function
of my package foo0, is it correct to call them as follow (
assuming 'x' is the only argument of 'f1' and 'f2'):
f1(x) foo2::f2(x)
OR should I use
foo1::f1(x) f2(x)
OR
f1(x) f2(x)
Yes, this one. You have imported f2 so the whole point of that is
that it will be inserted as "f2" into your imports environment,
so you want to use it that way. When you use foo2:: you are
skipping over imports and addressing the namespace of foo2
directly which sort of defeats the purpose (and is slower).
Thanks Simon for making the point related to f2 clearer for me.
As for f1, you have attached the package so it is available. I
would not use foo1:: for the same reason as above, but there is a
risk that it may get clobbered since the call will go through the
search path so you may not get f1 from foo1 necessarily - this
may or may not be a good thing depending on your intentions. You
could import it via import(foo1) to make sure you don't need to
go through the search path - that's what I would do if I don't
intend overrides. (Whether you want to use Depends or Imports in
that case is related to what you intend for the user to see as I
was saying in my last comment - if I expect users to use foo1 as
well, I would use Depends, otherwise Imports is good enough.)
Or declare in Depends but also import in the NAMESPACE.
So, if I'm only using a few functions of foo1, I shouldn't declare
them in Depends, but only in Imports, which also will allow me to be
sure that the functions come from foo1 and not from another package
that have functions with the same, right ?
Yes, but it would be better to use importsFrom() with just the functions
you need (the list of exported functions from foo1 could change over time).
I've just been through this advising an author of a package who needs to
use intersect() from rgeos, not intersect() from base.
--
Brian D. Ripley, rip...@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@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel