R-通过R中的省略号传递列名

R-通过R中的省略号传递列名,r,ellipsis,R,Ellipsis,我有一个像这样的数据框 df = data.frame(id = 1:10, wt = 71:80, gender = rep(1:2, 5), race = rep(1:2, 5)) 我正在尝试编写一个函数,该函数将一个数据帧作为第一个参数,同时包含表示该数据帧中列名的任意数量的参数,并使用这些列名对该数据帧执行操作。我的函数如下所示: library(dplyr) myFunction <- function(df, ...){ columns <- list(...)

我有一个像这样的数据框

df = data.frame(id = 1:10, wt = 71:80, gender = rep(1:2, 5), race = rep(1:2, 5))
我正在尝试编写一个函数,该函数将一个数据帧作为第一个参数,同时包含表示该数据帧中列名的任意数量的参数,并使用这些列名对该数据帧执行操作。我的函数如下所示:

library(dplyr)
myFunction <- function(df, ...){
 columns <- list(...)
  for (i in 1:length(columns)){
   var <- enquo(columns[[i]])
   df <- df %>% group_by(!!var)
  }
 df2 = summarise(df, mean = mean(wt))
 return(df2)
}
但是,我收到以下错误消息:

Error in myFunction(df, race, gender) : object 'race' not found

我们可以将
中的元素转换为quosures,然后进行计算(
!!!


非常感谢,这非常有帮助。@AbdallahAtef The
用于多个元素。但它也适用于1个元素
Error in myFunction(df, race, gender) : object 'race' not found
myFunction <- function(dat, ...){
    columns <- quos(...) # convert to quosures

 dat %>% 
     group_by(!!! columns) %>% # evaluate 
     summarise(mean = mean(wt))

 }

myFunction(df, race, gender)
# A tibble: 2 x 3
# Groups:   race [?]
#   race gender  mean
#  <int>  <int> <dbl>
#1     1      1    75
#2     2      2    76

myFunction(df, race)
# A tibble: 2 x 2
#   race  mean
#  <int> <dbl>
#1     1    75
#2     2    76
df <- data.frame(id = 1:10, wt = 71:80, gender = rep(1:2, 5), 
      race = rep(1:2, each = 5))

myFunction(df, race, gender)
myFunction(df, race)
myFunction(df, gender)
myFunction2 <- function(df, ...) {
 columns <- c(...)
 df %>% 
   group_by_at(columns) %>%
   summarise(mean= mean(wt))

 }

myFunction2(df, "race", "gender")