Modifying object for use with summary_table() in R: "Error: `x` must be a formula"

Modifying object for use with summary_table() in R: "Error: `x` must be a formula"

我正在尝试使用概述的方法 here 创建一个 table 汇总统计数据,尽管我对其他方法持开放态度。

在此大纲中,他们建议创建要输入到 summary_table() 命令的摘要统计列表,如下所示:

our_summary1 <-
  list("Miles Per Gallon" =
   list("min" = ~ min(.data$mpg),
        "max" = ~ max(.data$mpg),
        "mean (sd)" = ~ qwraps2::mean_sd(.data$mpg)),
   "Displacement" =
   list("min" = ~ min(.data$disp),
        "median" = ~ median(.data$disp),
        "max" = ~ max(.data$disp),
        "mean (sd)" = ~ qwraps2::mean_sd(.data$disp)),
   "Weight (1000 lbs)" =
   list("min" = ~ min(.data$wt),
        "max" = ~ max(.data$wt),
        "mean (sd)" = ~ qwraps2::mean_sd(.data$wt)),
   "Forward Gears" =
   list("Three" = ~ qwraps2::n_perc0(.data$gear == 3),
        "Four"  = ~ qwraps2::n_perc0(.data$gear == 4),
        "Five"  = ~ qwraps2::n_perc0(.data$gear == 5))
   )

由于我的数据框中有 48 列(每个变量一列),我发帖询问是否有另一种方法可以创建上面列出的对象类型。基于 ,我创建了这样的摘要对象:

summarized <- df %>%
  pivot_longer(cols = c(1:48)) %>%
  group_by(name) %>%
  summarize(lst = list(list( 
                        mean = mean(value),
                        max = max(value), 
                        min = min(value), 
                        sd = sd(value))))
result <- deframe(summarized)

当我将它放入 summary_table() 函数时,该函数不会 运行。

table <- summary_table(df, summaries = result) 

我收到以下错误消息。

Error: `x` must be a formula

您知道为什么 summary_table() 函数似乎无法处理我正在使用的对象吗?我认为我创建的对象与布局为 "our_summary1" 的对象相当。对于如何使它起作用的任何想法,我将不胜感激。

我查看了 and ,它们都是关于相同的错误消息,但它们没有回答我的问题,因为它们创建了对象以不同的方式输入 summary_table()方式比我做的。

这是一个创建表达式的选项,我们使用 map 遍历感兴趣的列名,创建一个字符串表达式,使用 sprintf 通过插入名称,然后 evalparse_expr 解析后对表达式进行赋值。这将用于 summary_table

---
title: "new"
author: "akrun"
date: "5/3/2020"
output: html_document
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```


```{r sumtable, results='asis'}
library(qwraps2)
library(dplyr)
library(purrr)
options(qwraps2_markup = "markdown")
out <- map(c('mpg', 'disp', 'wt'), ~ 
     eval(rlang::parse_expr(sprintf('list("min" = ~ min(.data$%s),
       "max" = ~ max(.data$%s),
       "mean (sd)" = ~ qwraps2::mean_sd(.data$%s))', .x, .x, .x))))
names(out) <- c("Miles Per Gallonv", "Displacement", "Weight (1000 lbs)" )
summary_table(mtcars, out)
```

-输出