如何在我的函数中使用?

时间:2017-05-04 11:15:04

标签: r dplyr

基本上我的问题是我不明白如何为我自己的函数分配多个变量名称作为“逗号分隔列表”。我的功能如下:

tsf <- function(df, ...){
    df<- arrange_(df, .dots = substitute(...))
    other stuff
  return(df)
}

但如果我将其用作

t <- tsf(df, var1, var2)

数据帧只会在var1的基础上排列,而不是排列在(df,var1,var2)中,它将由两者排列。

我应该如何更正我的代码?

2 个答案:

答案 0 :(得分:2)

请参阅the vignette

library(dplyr)
packageVersion("dplyr")
# [1] ‘0.5.0.9004’
tsf <- function(df, ...){
  df<- arrange(df, !!!quos(...))
  return(df)
}
tsf(mtcars, vs, cyl)

Also note

  

每个主要动词的下划线版本(filter_(),select_()   等等)。不再需要,因此这些函数已被弃用   (但为了向后兼容而保持不变)。

答案 1 :(得分:2)

您可以使用alist捕获列表中点参数的值。

tsf <- function(df, ...){
  dots <- eval(substitute(alist(...)))
  dots <- vapply(dots,
                 deparse,
                 character(1))
  df <- dplyr::arrange_(df, .dots = dots)
  return(df)
}

tsf(mtcars, am, carb, gear)

请参阅http://adv-r.had.co.nz/Computing-on-the-language.html

上的“捕获未评估的...”部分