-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi I have the following code: x <- data.frame(x1=1, x2=2, y1=3) x$y [1] 3 x$x NULL I was surprised (and definitely irritated?) when I realised that partial matching also works for the $. Is this intended? I assume the reason is that $ is internally a function? Rainer - -- Rainer M. Krug, PhD (Conservation Ecology, SUN), MSc (Conservation Biology, UCT), Dipl. Phys. (Germany) Centre of Excellence for Invasion Biology Stellenbosch University South Africa Tel : +33 - (0)9 53 10 27 44 Cell: +33 - (0)6 85 62 59 98 Fax : +33 - (0)9 58 10 27 44 Fax (D): +49 - (0)3 21 21 25 22 44 email: Rainer at krugs.de Skype: RMkrug -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.11 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/ iEYEARECAAYFAk9jQ+YACgkQoYgNqgF2egpe7QCeL2us46r9NVtJsXteUhEaBcwe disAn2eY5Ci5/QNgRLOwOs8HVTcF3KHn =Qgnt -----END PGP SIGNATURE-----
Hi Rainer, On Fri, Mar 16, 2012 at 9:45 AM, Rainer M Krug <r.m.krug at gmail.com> wrote:> -----BEGIN PGP SIGNED MESSAGE----- > Hash: SHA1 > > Hi > > I have the following code: > > ?x <- data.frame(x1=1, x2=2, y1=3) > ?x$y > [1] 3 > ?x$x > NULL> > I was surprised (and definitely irritated?) when I realised that partial matching also works for > the $. Is this intended?This is documented behavior, which by definition makes it a feature, right? Both ?[[? and ?$? select a single element of the list. The main difference is that ?$? does not allow computed indices, whereas ?[[? does. ?x$name? is equivalent to ?x[["name", exact FALSE]]?. Also, the partial matching behavior of ?[[? can be controlled using the ?exact? argument. It's also a really good reason to use [[ in functions or anywhere there might be a chance of confusion. Sarah -- Sarah Goslee http://www.functionaldiversity.org