Модификация объекта для использования с summary_table () в R: «Ошибка:` x` должно быть формулой » - PullRequest
1 голос
/ 04 мая 2020

Я пытаюсь создать таблицу сводной статистики, используя методы, обозначенные здесь , хотя я открыт для альтернатив.

В этой схеме они рекомендуют создать список сводной статистики для ввода в команду 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». Буду признателен за любые идеи о том, как заставить это работать.

Я смотрел на этот вопрос и на этот вопрос , которые оба относятся к одному и тому же сообщению об ошибке, но они не отвечают на мой вопрос, так как они создают объект для ввода в summary_table () другим способом, чем я.

1 Ответ

1 голос
/ 04 мая 2020

Вот один из вариантов создания выражения, в котором мы l oop над именами интересующих столбцов с помощью map, создаем строковое выражение с помощью sprintf путем интерполяции имен, а затем eval используем выражение после анализа с parse_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)
```

-выходе

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...