Indexing a dataframe with $ inside a function?

后端 未结 3 703
生来不讨喜
生来不讨喜 2021-01-26 11:10

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

相关标签:
3条回答
  • 2021-01-26 11:45

    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)
    }
    
    0 讨论(0)
  • 2021-01-26 11:47

    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
    
    0 讨论(0)
  • 2021-01-26 12:01

    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
    
    0 讨论(0)
提交回复
热议问题