如何使用带省略号(点)的 parse_exprs
How to use parse_exprs with ellipsis(dots)
传递多个参数不起作用
尝试使用 3dots ... 和 !!! 3刘海。但错误。
library(tidyverse)
library(rlang)
tf1= data.frame(y=c('price'), grp= c('stock'),x=c('time')
,stringsAsFactors = FALSE) >
dat= data.frame(price=c(20,12,24,34,12,34,56,88),
stock=c('fb','fb','fb','fb','ms','ms','ms','ms'),time=c(2,4,6,8,2,4,6,8))
my_fun2 <- function(.x, .num_var, ...){
group_var <- parse_exprs(...)
print (group_var)
num_var <- parse_expr(.num_var)
x %>%
group_by(!!!group_var) %>%
mutate(avg = mean(!!num_var), n = n(),
sd = sd(!!num_var), se = sd/sqrt(n)) %>%
distinct(!!!group_var, .keep_all = TRUE) }
my_fun2(dat, tf1$y, tf1$grp,tf1$x)
Error in parse_exprs(...) : unused argument (tf1$x)
如下
library(tidyverse)
library(rlang)
tf1= data.frame(y=c('price'), grp= c('stock'),x=c('time') ,stringsAsFactors = FALSE)
dat= data.frame(price=c(20,12,24,34,12,34,56,88),
stock=c('fb','fb','fb','fb','ms','ms','ms','ms'),time=c(2,4,6,8,2,4,6,8))
my_fun2 <- function(.x, .num_var, ...){
group_var <- parse_exprs(...)
print (group_var)
num_var <- parse_expr(.num_var)
x %>%
group_by(!!!group_var) %>%
mutate(avg = mean(!!num_var), n = n(),
sd = sd(!!num_var), se = sd/sqrt(n)) %>%
distinct(!!!group_var, .keep_all = TRUE)
}
my_fun2(dat, tf1$y, tf1$grp,tf1$x)
实际出来的是分组汇总统计。
Error in parse_exprs(...) : unused argument (tf1$x)
由于传递的值是字符串,我们可以使用 group_by_at
更轻松地完成此操作。此外,确保字符串转换为符号 (sym
) 并在 mean
、sd
中计算 (!!
)
my_fun2 <- function(.x, num_var, ...){
group_var <- c(...)
.x %>%
group_by_at(vars(group_var)) %>%
mutate(avg = mean(!! rlang::sym(num_var)), n = n(),
sd = sd(!! rlang::sym(num_var)), se = sd/sqrt(n)) %>%
distinct_at(vars(group_var), .keep_all = TRUE)
}
my_fun2(dat, tf1$y, tf1$grp, tf1$x)
# A tibble: 8 x 7
# Groups: stock, time [8]
# price stock time avg n sd se
# <dbl> <fct> <dbl> <dbl> <int> <dbl> <dbl>
#1 20 fb 2 20 1 NA NA
#2 12 fb 4 12 1 NA NA
#3 24 fb 6 24 1 NA NA
#4 34 fb 8 34 1 NA NA
#5 12 ms 2 12 1 NA NA
#6 34 ms 4 34 1 NA NA
#7 56 ms 6 56 1 NA NA
#8 88 ms 8 88 1 NA NA
sd
和 se
是 NA
因为每组只有一个观察值
传递多个参数不起作用
尝试使用 3dots ... 和 !!! 3刘海。但错误。
library(tidyverse)
library(rlang)
tf1= data.frame(y=c('price'), grp= c('stock'),x=c('time')
,stringsAsFactors = FALSE) >
dat= data.frame(price=c(20,12,24,34,12,34,56,88),
stock=c('fb','fb','fb','fb','ms','ms','ms','ms'),time=c(2,4,6,8,2,4,6,8))
my_fun2 <- function(.x, .num_var, ...){
group_var <- parse_exprs(...)
print (group_var)
num_var <- parse_expr(.num_var)
x %>%
group_by(!!!group_var) %>%
mutate(avg = mean(!!num_var), n = n(),
sd = sd(!!num_var), se = sd/sqrt(n)) %>%
distinct(!!!group_var, .keep_all = TRUE) }
my_fun2(dat, tf1$y, tf1$grp,tf1$x)
Error in parse_exprs(...) : unused argument (tf1$x)
如下
library(tidyverse)
library(rlang)
tf1= data.frame(y=c('price'), grp= c('stock'),x=c('time') ,stringsAsFactors = FALSE)
dat= data.frame(price=c(20,12,24,34,12,34,56,88),
stock=c('fb','fb','fb','fb','ms','ms','ms','ms'),time=c(2,4,6,8,2,4,6,8))
my_fun2 <- function(.x, .num_var, ...){
group_var <- parse_exprs(...)
print (group_var)
num_var <- parse_expr(.num_var)
x %>%
group_by(!!!group_var) %>%
mutate(avg = mean(!!num_var), n = n(),
sd = sd(!!num_var), se = sd/sqrt(n)) %>%
distinct(!!!group_var, .keep_all = TRUE)
}
my_fun2(dat, tf1$y, tf1$grp,tf1$x)
实际出来的是分组汇总统计。
Error in parse_exprs(...) : unused argument (tf1$x)
由于传递的值是字符串,我们可以使用 group_by_at
更轻松地完成此操作。此外,确保字符串转换为符号 (sym
) 并在 mean
、sd
!!
)
my_fun2 <- function(.x, num_var, ...){
group_var <- c(...)
.x %>%
group_by_at(vars(group_var)) %>%
mutate(avg = mean(!! rlang::sym(num_var)), n = n(),
sd = sd(!! rlang::sym(num_var)), se = sd/sqrt(n)) %>%
distinct_at(vars(group_var), .keep_all = TRUE)
}
my_fun2(dat, tf1$y, tf1$grp, tf1$x)
# A tibble: 8 x 7
# Groups: stock, time [8]
# price stock time avg n sd se
# <dbl> <fct> <dbl> <dbl> <int> <dbl> <dbl>
#1 20 fb 2 20 1 NA NA
#2 12 fb 4 12 1 NA NA
#3 24 fb 6 24 1 NA NA
#4 34 fb 8 34 1 NA NA
#5 12 ms 2 12 1 NA NA
#6 34 ms 4 34 1 NA NA
#7 56 ms 6 56 1 NA NA
#8 88 ms 8 88 1 NA NA
sd
和 se
是 NA
因为每组只有一个观察值