Please see below. On Wed, 2010-11-17 at 04:41 -0500, Ted Harding wrote: > On 17-Nov-10 00:02:39, José Fernando Zea Castro wrote: > > Hello. > > First, I'm thankful about your wonderful project. > > > > However, I have serious worries about the reliability of R. > > I found the next bug which I consider important because in > > my job everytime We work with datanames like next. Please > > see below: > > > > b=data.frame(matrix(1:9,ncol=3)) > > names(b)=c("q99","r88","s77") > > > > >b > > q99 r88 s77 > > 1 1 4 7 > > 2 2 5 8 > > 3 3 6 9 > >> b$q9 > > [1] 1 2 3 > > > > > > Please note that the variable q9 does not exist in the dataframe, > . but you can see that R show q9 (as q99). > > > > Thank in advanced > > > > Cordially > > José Fernando Zea Castro > > Statistician Universidad Nacional Colombiana > > What you see here is a case of "partial matching": You ask for > 'b$q9', and R sees that 'q9' matches the beginning of 'q99' > and nothing else. Therefore it responds with the value of 'b$q99', > since there is no ambiguity. > > You would have got the same result if you had asked for > > b$q > > since there is no component name in b which matches 'q' except 'q99'. > > If there had been two components which matched 'q9', say both > b$q99 and b$q98, then you would have got a NULL result, since > there is not a unique match. > > However, if you also have b$q9 and b$q99 in b, then R would find that > b$q9 was an *exact* (not partial) match, and would return that one. > > Normally, this should not cause problems. However, if you have > written code which must take special action if a name is not > present in a list, then there could be problems. > > For example, if b might (depending on what has happened) contain > b$q9 only, or b$q99 only, or *both* b$q9 and b$q99, and you want > to execute special actions if a name is not present in b, then > in the case where b contained only b$q99 and you asked for b$q9, > you would get the wrong result because of partial matching. > > This is one of those cases, in my opinion, where R's documentation > drops you into a flat landscape, in the middle of nowhere, in a > thick mist.
This does happen sometimes, but partial matching in indexing operations is documented in the R Language Definition manual section 3.4.1, and well documented in the help page (?Extract or ?`$` or ?`[`). > What is needed is to be able to set an option such > that R will *only* respond with exact matches, e.g. something > like options(partial.match=FALSE). I have spent about 20 minutes > trying to locate the possible existence of such an option, or a > similar way of suppressing partial matching. No success! Indexing a list using [[ and a string enforce exact matching (by default). Continuing with the example above: > b[["q99"]] [1] 1 2 3 > b[["q"]] NULL > The closest I could get was the set of options, settable using > options(... = ...): > > 'warnPartialMatchArgs': logical. If true, warns if partial > matching is used in argument matching. > > 'warnPartialMatchAttr': logical. If true, warns if partial > matching is used in extracting attributes via 'attr'. > > 'warnPartialMatchDollar': logical. If true, warns if partial > matching is used for extraction by '$'. > > which concerns only the issue of warnings in such cases, and has > nothing to do with suppressing partial matching. > > Maybe others know better! > > Best wishes, > Ted. > > -------------------------------------------------------------------- > E-Mail: (Ted Harding) <ted.hard...@wlandres.net> > Fax-to-email: +44 (0)870 094 0861 > Date: 17-Nov-10 Time: 09:41:03 > ------------------------------ XFMail ------------------------------ > > ______________________________________________ > R-help@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. -- Matthew S. Shotwell Graduate Student Division of Biostatistics and Epidemiology Medical University of South Carolina ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.