There looks to be a bug in do_attr() (src/main/attrib.c): incorrect partial matches of attribute names can be returned when there are an odd number of partial matches.
E.g.: > x <- c(a=1,b=2) > attr(x, "abcdef") <- 99 > attr(x, "ab") [1] 99 > attr(x, "abc") <- 100 > attr(x, "ab") # correctly returns NULL because of ambig partial match NULL > attr(x, "abcd") <- 101 > attr(x, "ab") # incorrectly returns non-NULL for ambig partial match [1] 101 > names(attributes(x)) [1] "names" "abcdef" "abc" "abcd" > The problem in do_attr() looks to be that after match is set to PARTIAL2, it can be set back to PARTIAL again. I think a simple fix is to add a "break" in this block in do_attr(): else if (match == PARTIAL) { /* this match is partial and we already have a partial match, so the query is ambiguous and we return R_NilValue */ match = PARTIAL2; break; /* <---- ADD BREAK HERE */ } else { However, if this is indeed a bug, would this be a good opportunity to get rid of partial matching on attribute names -- it was broken anyway -- so toss it out? :-) Does anyone depend on partial matching for attribute names? My view is that it's one of those things like partial matching of list and vector element names that seemed like a good idea at first, but turns out to be more trouble than it's worth. On a related topic, partial matching does not seem to work for the "names" attribute (which I would regard as a good thing :-). However, I'm puzzled why it doesn't work, because the code in do_attr() seems to try hard to make it work. Can anybody explain why? E.g.: > attr(x, "names") [1] "a" "b" > attr(x, "nam") NULL > sessionInfo() R version 2.4.1 (2006-12-18) i386-pc-mingw32 locale: LC_COLLATE=English_United States.1252;LC_CTYPE=English_United States.1252;LC_MONETARY=English_United States.1252;LC_NUMERIC=C;LC_TIME=English_United States.1252 attached base packages: [1] "stats" "graphics" "grDevices" "utils" "datasets" "methods" [7] "base" > -- Tony Plate ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel