1

我想编写一个使用dplyr::select(),gtsummary::tbl_summary()和的代码glue::glue()

计划是:

  • 从数据框中选择一些变量(例如:所有数值变量)
  • 返回基于分组变量(因子变量)的表摘要
  • 在表格中,标题应显示分组变量

我将使用gapminder数据集来演示错误。

预期的表是

在此处输入图像描述

下面,我演示一下我所做的

首先,我加载库

library(tidyverse)
library(glue)
library(gapminder)
library(gtsummary)

并写下我的功能

describe_grp <- function(data, group){
  data %>%
    tbl_summary(by = group) %>% add_p() %>%
    modify_caption(glue::glue("Detection For **{group}**")) %>%
    bold_labels()
}

但我需要使用'continent'(见下面的代码)。它像我想要的那样工作。

gapminder %>%
  select(is.integer, is.double, continent) %>%
  describe_grp(group = 'continent')

但是,我的首选是不使用连字符,即使用 describe_grp(group = continent).

所以我想我可以使用

  • enquo()
  • {{ }}卷曲的卷曲

但是,两者都不起作用。我猜它与glue::glue()函数有关modify_caption()

有关不起作用的代码,请参见下文:

#using enquo
describe_grp2 <- function(data, group){
  egroup <- enquo(group)
  data %>%
    tbl_summary(by = !!egroup) %>% add_p() %>%
    modify_caption(glue::glue("Detection For {(!!egroup)}")) %>%
    bold_labels()
}

gapminder %>%
  select(is.integer, is.double, continent) %>%
  describe_grp2(group = continent)

这些代码也不起作用

#using curly curly
describe_grp3 <- function(data, group){
  data %>%
    tbl_summary(by = {{group}}) %>% add_p() %>%
    modify_caption(glue::glue("Detection For **{{{group}}}**")) %>%
    bold_labels()
}

gapminder %>%
  select(is.integer, is.double, continent) %>%
  describe_grp3(group = continent)
4

1 回答 1

2

您可以使用 -

describe_grp <- function(data, group){
  group_val <- deparse(substitute(group))
  data %>%
    tbl_summary(by = {{group}}) %>% add_p() %>%
    modify_caption(glue::glue("Detection For **{group_val}**"))  %>%
    bold_labels()
}

gapminder %>%
  select(is.integer, is.double, continent) %>%
  describe_grp(group = continent)

在此处输入图像描述

于 2021-10-19T09:01:29.117 回答