On Wed, Aug 06, 2008 at 11:53:25AM -0400, Faheem Mitha wrote: > > Hi, > > Consider the following > >> x = c(1,2) >> y = c(3,4) >> d = data.frame(cbind(x,y)) >> d$x > [1] 1 2 >> d$"x" > [1] 1 2 >> >> foo = function(val) > + { > + return(d$val) > + } >> >> bar = function() > + { > + return(d$"x") > + } >> >> foo("x") > NULL >> bar() > [1] 1 2 > > I'm a little surprised that R accepts both the form d$x and d$"x", but > I'm mostly wondering why foo("x") doesn't work. > Thanks, Faheem.
To get the behaviour you were expecting, the definition should have been foo <- function(val) d[[val]] Look at the indexing help page help("$") It says Usage: <...> x$name <...> name: A literal character string or a name... and then further down, in the section on indexing lists 'x$name' is equivalent to 'x[["name", exact = FALSE]]'. So, d$val looks for an element called 'val' and doesn't find one. d[["val"]] would do the same. However d[[val]] looks for an object called 'val', and then tries to use its value to index into d. Dan > > ______________________________________________ > 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. ______________________________________________ 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.