From murdoch at stats.uwo.ca  Tue Aug 23 12:16:31 2005
From: murdoch at stats.uwo.ca (Duncan Murdoch)
Date: Tue, 23 Aug 2005 06:16:31 -0400
Subject: [Rd] Functions with the same name: best practices
In-Reply-To: <f8e6ff05050822195854575b4d@mail.gmail.com>
References: <f8e6ff05050822195854575b4d@mail.gmail.com>
Message-ID: <430AF77F.8090402@stats.uwo.ca>

hadley wickham wrote:
> Ok, here's another best practices question - let's say I'm writing a
> package and I want to use a function name that is already claimed by a
> function in the base R packages.  For the sake of argument, let's
> pretend this function is for profiling the performance of a function
> (like Rprof for example), and so an obvious name that comes to mind is
> profile.  This, of course, clashes with the built in profile for
> "investigating behavior of objective function near the solution
> represented by fitted."
> 
> A little thinking and a quick survey of other packages reveal some
> possible solutions:
> 
>  * capitalise the function differently (eg. Profile)
>  * use a prefix/suffic (eg. Rprof)
>  * use a thesaurus
>  * use namespaces (and rely on others to use namespaces correctly in
> their code/packages)
> 
> What would you suggest?

You should use a namespace.  It will protect your code against someone 
else using one of your function names.

If the function is for internal use only, that's sufficient.  If you 
want to export the function, you should try to avoid conflicting with 
existing functions that you expect users to have installed, because it 
becomes quite inconvenient to users:  their scripts depend on the load 
order of packages unless they put <pkg>:: in front of each call.

I think using a thesaurus would be best (if by that you mean choosing a 
different name that still describes the function), but will often fail, 
in which case I'd use the prefix/suffix decoration.  Changing only 
capitalization makes it nearly impossible to talk about your function 
without confusion.

Duncan Murdoch



[Rd] Functions with the same name: best practices
Duncan Murdoch