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 wh
Personally I think the dollar operator $
is handy and useful from the R console. It permits completion and partial namings feature. $
is useful for an interactive mode . But if you want to use it within your function you should create a call using do.call
like this :
myFunc2 <- function(x, y){
z <- do.call('$',list(x,y))
return(z)
}
myFunc2(BOD,'demand')
[1] 8.3 10.3 19.0 16.0 15.6 19.8
But here is simpler to use [
as you have mentioned:
myFunc2 <- function(x, y){
z <- x[,y]
return(z)
}
You can use also [[ instead of $
myFunc2 <- function(x, y){
+ z <- x[[y]]
+ return(z)
+ }
> myFunc2(BOD, 'demand')
[1] 8.3 10.3 19.0 16.0 15.6 19.8
If you want to perfectly mimic the $
operator you can use [[
and set the parameter exact
to FALSE
to allow for partial matching.
BOD <- data.frame(demand = 1:10)
myFunc2 <- function(x, y) x[[y, exact = FALSE]]
BOD$dem
## [1] 1 2 3 4 5 6 7 8 9 10
BOD[["dem"]]
## NULL
myFunc2(BOD, "dem")
## [1] 1 2 3 4 5 6 7 8 9 10