[Rd] (PR#9202) Re: Bugs with partial name matching

Bill Dunlap bill at insightful.com
Fri Sep 8 19:05:43 CEST 2006

> >  I can get the
> > desired single element match using the convoluted syntax D["ABC"]
> > [[1]] and perform partial replacement operations on a new column.
> > However, it would be nice to have single element access operator that
> > does exact matching.
> It wouldn't fix the bug, and we are running low on symbols that could be
> used.

SV4 and Splus have a function called elNamed() (and a corresponding
elNamed<-) that does exact matching.  E.g.,

> zlist<-list(abc=1, xyz=2)
> elNamed(zlist, "a")
> elNamed(zlist, "a", mustfind=TRUE) # error should say "element", not "slot"
Problem in elNamed(zlist, "a", mustfind = TRUE): Failed to find required slot "a"
Use traceback() to see the call stack
> elNamed(zlist, "abc")
[1] 1
> elNamed(zlist, "ab") <- 3
> dput(zlist)
list("abc" = 1
, "xyz" = 2
, "ab" = 3

It works on lists and atomic vectors and I think it
is not intended to be a generic function.  There is
a similar el(x, i) function for numeric subsetting
that is not intended to be generic (that is for
speed and safety when writing methods for [).

Its only documentation is some self-doc:

> elNamed
# extract or (when used on left of assignment) replace the element of `object' associated
# with `name'.  Differs from `$' in using only exact matching. Set `mustfind=T' if you
# want an error to occur when there is no such named element. NOT to be used for slots.
function(object, name, mustfind = F)
.Internal(elNamed(object, name, mustfind), "S_el_named", T, 0)

It isn't used much and has some surprises.  E.g.,
   elNamed(zlist, "ab")<-NULL
sets $ab to NULL; it doesn't remove it as ab$ab would.

Bill Dunlap
Insightful Corporation
bill at insightful dot com

 "All statements in this message represent the opinions of the author and do
 not necessarily reflect Insightful Corporation policy or position."

More information about the R-devel mailing list