Pass subset argument through a function to subset

后端 未结 2 525
忘了有多久
忘了有多久 2020-12-09 23:42

I would like to have a function which calls subset, and passes on a subset argument:

df <- data.frame(abc=c(\"A\",\"A\",\"B\",\"         


        
相关标签:
2条回答
  • 2020-12-09 23:51

    You need eval() and parse() in there too:

    mysubset <- function(df, ssubset) {
      subset(df, eval(parse(text=ssubset)))
    }
    mysubset(df, "abc=='A'")
    #   abc value
    # 1   A     1
    # 2   A     2
    

    Note that you need to nest quotes, so switch back and forth between " and ' as necessary.


    Based on your comment, perhaps something like this is also of interest:

    mysubset <- function(df, ...) {
      ssubset <- deparse(substitute(...))
      subset(df, eval(parse(text = ssubset)))
    }
    

    USAGE: mysubset(df, abc=='A')

    0 讨论(0)
  • 2020-12-10 00:12

    The A5C1D2H2I1M1N2O1R2T1 answer works, but you can skip the whole deparse/parse cycle by simply using:

    mysubset <- function(df, p) {
      ps <- substitute(p)
      subset(df, eval(ps))
    }
    
    0 讨论(0)
提交回复
热议问题