0

我正在尝试创建一个函数,该函数将返回一个gt公共psych::describe()psych::describeBy()函数的结果表。

问题是describeBy()期望 group 参数是 formdata$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 )
    )
}

我在通话中尝试了很多关于 enquo、names()、!! 等的变体group = ,但我无法让它正常工作。任何人都可以帮忙吗?

4

1 回答 1

1

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

注意:注意最好的方法,但它有效

于 2020-07-30T16:10:54.477 回答