From ripley at stats.ox.ac.uk  Thu May 17 21:54:27 2007
From: ripley at stats.ox.ac.uk (Prof Brian Ripley)
Date: Thu, 17 May 2007 20:54:27 +0100 (BST)
Subject: [Rd] RFC: adding an 'exact' argument to [[
In-Reply-To: <m2fy5vfe3x.fsf@ziti.fhcrc.org>
References: <m2irarh1mu.fsf@ziti.fhcrc.org>
	<Pine.GSO.4.56.0705171150100.25965@durian.statsci.com>
	<m2fy5vfe3x.fsf@ziti.fhcrc.org>
Message-ID: <Pine.LNX.4.64.0705172039480.10304@gannet.stats.ox.ac.uk>

On Thu, 17 May 2007, Seth Falcon wrote:

> Bill Dunlap <bill at insightful.com> writes:
>> This sounds interesting.  Do you intend to leave the $
>> operator alone, so it will continue to do partial
>> matching?  I suspect that that is where the majority
>> of partial matching for list names is done.
>
> The current proposal will not touch $.  I agree that most intentional
> partial matching uses $ (hopefully only during interactive sessions).
> The main benefit of the our proposed change is more reliable package
> code.  For long lists and certain patterns of use, there are also
> performance benefits:
>
>    > kk <- paste("abc", 1:(1e6), sep="")
>    > vv = as.list(1:(1e6))
>    > names(vv) = kk
>
>    > system.time(vv[["fooo", exact=FALSE]])
>       user  system elapsed
>      0.074   0.000   0.074
>
>    > system.time(vv[["fooo", exact=TRUE]])
>       user  system elapsed
>      0.042   0.000   0.042
>
>
>> It might be nice to have an option that made x$partial warn so we
>> would fix code that relied on partial matching, but that is lower
>> priority.
>
> I think that could be useful as well.  To digress a bit further in
> discussing $... I think the argument that partial matching is
> desirable because it saves typing during interactive sessions now has
> a lot less weight.  The recent integration of the completion code
> gives less typing and complete names.

There is a similar issue with argument partial matching.  Since we have 
the source of R one can pretty easily build a version of R which does not 
have the feature: I have been doing that in conjunction with 'codetools' 
to do some checking.

In both cases there is traditional partial matching: seq(along=) or 
seq(length=), and $fitted vs $fitted.values.  There are not many uses of 
seq(along.with=) about and vastly more of seq(along=) (although in R using 
seq_along() is preferable): even in some packages which do use 
seq(along.with=) there are more instances of seq(along=).

-- 
Brian D. Ripley,                  ripley at 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



[Rd] RFC: adding an 'exact' argument to [[
Prof Brian Ripley