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")