Many R textbooks encourage the use of $ to retrieve variables (columns) from data.frames^. However, I found that this does not work inside a function, and I can't figure out why.
data(BOD)
print(BOD)
# These work.
BOD$'demand'
BOD[ ,'demand']
# This works.
myFunc1 <- function(x, y){
z <- x[ , y]
return(z)
}
out <- myFunc(BOD, 'demand')
# This doesn't work.
myFunc2 <- function(x, y){
z <- x$y
return(z)
}
out <- myFunc2(BOD, 'demand')
I notice that in the R Language Definition it says:
The form using $ applies to recursive objects such as lists and pairlists. It allows only a literal >character string or a symbol as the index. That is, the index is not computable: for cases where >you need to evaluate an expression to find the index, use x[[expr]]. When $ is applied to a >non-recursive object the result used to be always NULL: as from R 2.6.0 this is an error.
Is myFunc2 above an example where $ is not being supplied a literal character string?
^ Zuur 2009 'Beginner's Guide to R' p 61
^ Spector 2008 'Data Manipulation with R' p 26, 64, 69