【问题标题】:Tidyeval in a non-quasiquotation context (psych::describeBy(group))非准引用上下文中的 Tidyeval (psych::describeBy(group))
【发布时间】:2020-11-20 10:14:36
【问题描述】:

我正在尝试创建一个函数,该函数将返回一个gt 常用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()、!! 等的变体,但我无法让它正常工作。有人可以帮忙吗?

【问题讨论】:

    标签: r tidyverse rlang tidyeval gt


    【解决方案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)))
    }
    

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

    【讨论】:

    • 这感觉应该可以,但我仍然收到 error: object 'grouping_variable' not found 错误
    • 错误来自tidyverse部分的gropbygroup1 是什么?
    • 试试我在你的数据上写的my_describe 函数。它绝对应该工作
    • &gt; my_describe &lt;- function(data, group = NULL, fast = TRUE){ + if(is.null(group)) + psych::describe(data) + else psych::describeBy(as.formula(substitute(data~group))) + } &gt; my_describe(penguins, species) Error in my_describe(penguins, species) : object 'species' not found group1 是 describeBy 的输出调用用户输入的分组变量;有必要对其进行格式化以用于gt()
    • @AndrewMcCartney 我知道问题出在哪里。给我一秒钟
    猜你喜欢
    • 1970-01-01
    • 2020-02-09
    • 1970-01-01
    • 2012-02-25
    • 1970-01-01
    • 2018-12-05
    • 1970-01-01
    • 2014-12-25
    • 1970-01-01
    相关资源
    最近更新 更多