非准引用上下文中的 Tidyeval (psych::describeBy(group))
Tidyeval in a non-quasiquotation context (psych::describeBy(group))
我正在尝试创建一个函数,它将 return 一个 gt
table 公共 psych::describe()
和 psych::describeBy()
函数的结果。
问题是 describeBy()
期望组参数的形式为 data$vector
而不仅仅是 group = vector
.
所以
describeBy(data, data$group)
# works
describeBy(data, group)
# doesn't work
这对于一般用途来说很好——只是要记住。 但是要在闪亮的应用程序中使用它,我真的需要它采用上面第二次调用的形式。
到目前为止,这是我的功能:
description<-function(data, group = NULL, fast = TRUE, ...) {
grp<-paste0(deparse(substitute(group)))
#print(grp)
if(is.null(group)) {
data %>%
psych::describe(fast = fast, ...) %>%
tibble::rownames_to_column() %>%
dplyr::select(-c(vars)) %>%
dplyr::mutate(dplyr::across(is.numeric, round, 2)) %>%
gt::gt() %>%
gt::tab_options(
column_labels.font.size = "small",
table.font.size = "small",
row_group.font.size = "small",
data_row.padding = px(3)
) %>%
tab_header(
title = paste0("Data Description")
)
} else {
data %>%
psych::describeBy(group = group, fast = fast, mat= TRUE, ...) %>%
tibble::rownames_to_column() %>%
select(-c(item, vars)) %>%
dplyr::mutate(dplyr::across(is.numeric, round, 2)) %>%
arrange(group1) %>%
group_by(group1) %>%
gt() %>%
gt::tab_options(
column_labels.font.size = "small",
table.font.size = "small",
row_group.font.size = "small",
data_row.padding = px(3))
} %>%
tab_header(
title = paste0("Data Description") ,
subtitle = paste0("Grouped by: ", grp )
)
}
我在 group =
调用中尝试了很多关于 enquo、names()、!! 等的变体,但我不能完全让它正常工作。有人可以帮忙吗?
psych::describeBy
不包含数据参数。因此,您不能直接从数据中使用 group
。如果你需要使用它,你最好使用公式选项。例如:
psych::describeBy(iris~Species)
如果您要编写一个函数,那么请执行以下操作:
my_describe <- function(data, group = NULL, fast = TRUE){
if(deparse(substitute(group)) == 'NULL')
psych::describe(data)
else psych::describeBy(as.formula(substitute(data~group)))
}
注意:请注意最好的方法,但它确实有效
我正在尝试创建一个函数,它将 return 一个 gt
table 公共 psych::describe()
和 psych::describeBy()
函数的结果。
问题是 describeBy()
期望组参数的形式为 data$vector
而不仅仅是 group = vector
.
所以
describeBy(data, data$group)
# works
describeBy(data, group)
# doesn't work
这对于一般用途来说很好——只是要记住。 但是要在闪亮的应用程序中使用它,我真的需要它采用上面第二次调用的形式。
到目前为止,这是我的功能:
description<-function(data, group = NULL, fast = TRUE, ...) {
grp<-paste0(deparse(substitute(group)))
#print(grp)
if(is.null(group)) {
data %>%
psych::describe(fast = fast, ...) %>%
tibble::rownames_to_column() %>%
dplyr::select(-c(vars)) %>%
dplyr::mutate(dplyr::across(is.numeric, round, 2)) %>%
gt::gt() %>%
gt::tab_options(
column_labels.font.size = "small",
table.font.size = "small",
row_group.font.size = "small",
data_row.padding = px(3)
) %>%
tab_header(
title = paste0("Data Description")
)
} else {
data %>%
psych::describeBy(group = group, fast = fast, mat= TRUE, ...) %>%
tibble::rownames_to_column() %>%
select(-c(item, vars)) %>%
dplyr::mutate(dplyr::across(is.numeric, round, 2)) %>%
arrange(group1) %>%
group_by(group1) %>%
gt() %>%
gt::tab_options(
column_labels.font.size = "small",
table.font.size = "small",
row_group.font.size = "small",
data_row.padding = px(3))
} %>%
tab_header(
title = paste0("Data Description") ,
subtitle = paste0("Grouped by: ", grp )
)
}
我在 group =
调用中尝试了很多关于 enquo、names()、!! 等的变体,但我不能完全让它正常工作。有人可以帮忙吗?
psych::describeBy
不包含数据参数。因此,您不能直接从数据中使用 group
。如果你需要使用它,你最好使用公式选项。例如:
psych::describeBy(iris~Species)
如果您要编写一个函数,那么请执行以下操作:
my_describe <- function(data, group = NULL, fast = TRUE){
if(deparse(substitute(group)) == 'NULL')
psych::describe(data)
else psych::describeBy(as.formula(substitute(data~group)))
}
注意:请注意最好的方法,但它确实有效