From ggrothendieck at gmail.com  Thu Jun  4 19:48:28 2009
From: ggrothendieck at gmail.com (Gabor Grothendieck)
Date: Thu, 4 Jun 2009 13:48:28 -0400
Subject: [Rd] proposed changes to RSiteSearch
In-Reply-To: <4A28069D.6030802@prodsyse.com>
References: <39B6DDB9048D0F4DAD42CB26AAFF0AFA07381973@usctmx1106.merck.com> 
	<4A032E6F.8010001@dbmail.com> <20090507192632.GA4723@psych.upenn.edu> 
	<39B6DDB9048D0F4DAD42CB26AAFF0AFA073C4844@usctmx1106.merck.com> 
	<4A26ED1D.1020407@prodsyse.com> <4A276278.3050404@stats.uwo.ca> 
	<971536df0906040430s14c3f78fy2b1f639dfd3ce209@mail.gmail.com> 
	<4A27F2A5.70705@stats.uwo.ca>
	<971536df0906040923s7e791559vc217183e59742902@mail.gmail.com> 
	<4A28069D.6030802@prodsyse.com>
Message-ID: <971536df0906041048o3d61ce0bn5414cee5b84583e9@mail.gmail.com>

On Thu, Jun 4, 2009 at 1:38 PM, spencerg <spencer.graves at prodsyse.com> wrote:
> Gabor Grothendieck wrote:
>>
>> On Thu, Jun 4, 2009 at 12:13 PM, Duncan Murdoch <murdoch at stats.uwo.ca>
>> wrote:
>>
>>>
>>> Gabor Grothendieck wrote:
>>>
>>>>
>>>> On Thu, Jun 4, 2009 at 1:58 AM, Duncan Murdoch <murdoch at stats.uwo.ca>
>>>> wrote:
>>>>
>>>>
>>>>>
>>>>> spencerg wrote:
>>>>>
>>>>>
>>>>>>
>>>>>> Hello All:
>>>>>>
>>>>>> ? ?What do you think of adding a function "RSiteSeach" to the package
>>>>>> of
>>>>>> that name, masking the "RSiteSearch" function in "utils", trapping any
>>>>>> call
>>>>>> RSiteSearch('searchstring', 'function') to the current
>>>>>> RSiteSearch.function
>>>>>> and passing all others to "utils:::RSiteSearch"? ?This was suggested
>>>>>> by
>>>>>> a
>>>>>> referee to a manuscript on this new capability submitted to "R
>>>>>> Journal".
>>>>>> ?The current version of this manuscript is available via
>>>>>> "system.file('doc',
>>>>>> 'RSiteSearch.pdf', package='RSiteSearch')" if you have the
>>>>>> "RSiteSearch"
>>>>>> package installed.
>>>>>>
>>>>>>
>>>>>
>>>>> I suppose this depends on your long term plans for the function and
>>>>> package.
>>>>> ?If you think it should eventually replace the utils function, then it
>>>>> makes
>>>>> sense to use the same name: ?users won't get used to a new name in the
>>>>> meantime. ?But if you think it will diverge from that function, then
>>>>> you
>>>>> might as well pick a separate name now.
>>>>>
>>>>> I disagree with Gabor about this being heavy handed, at least while it
>>>>> is
>>>>> the only significant export in the package. ?If people don't want it,
>>>>> don't
>>>>> attach the package.
>>>>>
>>>>>
>>>>>
>>>>
>>>> The last sentence only gives you a choice of clobbering the existing
>>>> function or not using it and that is not very nice. ? What is wanted is
>>>> both to be able to use it and allow it to coexist in a nice way.
>>>>
>>>>
>>>
>>> It is essentially a rename of the existing one to utils::RSiteSearch. ?I
>>> would only suggest this if RSiteSearch::RSiteSearch expanded on its
>>> capabilities (which I think was Spencer's proposal), rather than
>>> replacing
>>> them with something different.
>>>
>>>
>>>>
>>>> How about R changing its RSiteSearch to be an S3 generic with the
>>>> main functionality being placed into RSiteSearch.default? ? Then
>>>> RSiteSearch.function can become RsiteSearch.character and
>>>> ?- RSiteSearch will give the new functionality when the package is
>>>> loaded and the old functionality if not.
>>>> - RSiteSearch.character can be used in place of RSiteSearch.function
>>>> to force only the new functionality (or an error if not present)
>>>> - RSiteSearch.default will give the old functionality whether or not the
>>>> package is loaded
>>>>
>>>> (If there is a NAMESPACE then Its assumed here that both methods are
>>>> exported.)
>>>>
>>>>
>>>
>>> How is that an improvement? ?Just replace your (RSiteSearch,
>>> RSiteSearch.character, RSiteSearch.default) with (RSiteSearch,
>>> RSiteSearch::RSiteSearch, utils::RSiteSearch) in my proposal and you get
>>> the
>>> same behaviour. ?The point isn't that Spencer has invented a way for
>>> RSiteSearch to handle character vectors, it already knows that. ?The
>>> point
>>> is that he has enhanced it. ?Or maybe he has written something similar
>>> but
>>> different, in which case he should pick a new name.
>>> Duncan Murdoch
>>>
>>>
>>
>> He simply renames it RSiteSearch.character (and possibly some other
>> changes depending on arguments). Then if the core cooperates
>> by making RSiteSearch a generic with a default method then everything
>> works as one would expect based on an understanding of S3.
>>
>> No conflicts in names are involved.
>>
>>
>
> To clarify: ?RSiteSearch.function{RSiteSearch} accesses Johathan Baron's
> RSiteSearch data base for functions only, returning the result as a
> data.frame, sorts it to put the most frequently cited package first and then
> help page within package.
> ? ? Spencer

Consider this:

> f <- function(x) UseMethod("f")
> f.character <- function(x) { if (nchar(x) > 1) NextMethod() else x }
> f.default <- function(x) nchar(x)
> f("xx")
[1] 2
> f("x")
[1] "x"

In this case f takes a single character string argument and passes it
to f.character.

f.character can handle a single character (it just returns
it) but if x consists of a string of multiple characters it hands
it off to f.default (which returns the number of characters).



[Rd] proposed changes to RSiteSearch
Gabor Grothendieck