dplyr使用点参数排除列

时间:2017-11-09 01:20:16

标签: r dplyr

我们如何编写一个允许用户使用...参数dplyr样式删除多个列的函数?

E.g。

mydrop=function(x,...){function body}
mydrop(npk,N:K)

返回npk[,c("block","yield")]

请注意,...参数与所有?select_helpers函数兼容非常重要。

2 个答案:

答案 0 :(得分:2)

与@akrun类似,但允许为{...}请求的N:K,dplyr样式列选择,以及一些错误处理:

mydrop <- function(x,...){
  try(
  todrop <- x %>%
    select(...) %>% names(.)
  , silent = TRUE)
  if(exists('todrop')){
    x %>% select(setdiff(current_vars(), todrop))
  }else x
} 

答案 1 :(得分:1)

也许我们可以使用

mydrop <- function(x,...){
 nm <- list(...)

 if(length(nm)>0) {
  x %>%
    select(-one_of(unlist(nm)))

   } else x
}


mydrop(npk, "N", "K")

使用可重复的示例

mydrop(mtcars, 'mpg', 'cyl') 
mydrop(mtcars)
mydrop(mtcars, names(mtcars)[-1])
mydrop(mtcars, names(mtcars))