Как отобразить результаты Summary() в виде plot/grob?

Контекст: у меня есть набор данных с более чем 50 функциями, и я хотел бы создать блокпост, гистограмму и сводную статистику для каждой из них, для целей презентации. Это делает 150+ участков. Код, который я использовал для вышеупомянутого, таков:

library(ggplot2)
library(dplyr)
library(ggpubr)
library(ggthemes)
library(Rmisc)
library(gridExtra)    

myplots <- list()  # new empty list

for (i in seq(2,5,3)){
  local({
    i <- i
    p1 <- ggplot(data=dataset,aes(x=dataset[ ,i], colour=label))+ 
      geom_histogram(alpha=.01, position="identity",bins = 33, fill = "white") +
      xlab(colnames(dataset)[ i]) + scale_y_log10()  + theme_few()
    p2<- ggplot(data=dataset, aes( x=label, y=dataset[ ,i], colour=label)) +
      geom_boxplot()+ylab(colnames(dataset)[ i]) +theme_few()
    p3<- summary(dataset[ ,i])
    print(i)
    print(p1)
    print(p2)
    print(p3)
    myplots[[i]] <<- p1  # histogram
    myplots[[i+1]] <<- p2 # boxplot
    myplots[[i+2]] <<- p3 # summary
  })
}

myplots[[2]]
length(myplots)

n <- length(myplots)
nCol <- floor(sqrt(n))
do.call("grid.arrange", c(myplots, ncol=nCol)) # PROBLEM: cant print summary as  grob

Я создал список графиков, каждые 3 элемента представляют результаты гистограммы, блокпоста и сводки для каждой функции. Я перебираю каждую из 50+ функций, добавляя каждый из результатов в свой список (не лучший способ сделать это, я знаю). Затем я сталкиваюсь со следующей проблемой, когда пытаюсь распечатать список через сетку:

Error in gList(list(grobs = list(list(x = 0.5, y = 0.5, width = 1, height = 1,  : 
  only 'grobs' allowed in "gList"

Понятно так, так как функция итога не создает графический объект. Любые идеи относительно того, как я могу преодолеть эту неудачу, за исключением того, чтобы вообще не включать сводную статистику?

1 ответ

Решение

Привет, после объединения нескольких предложений, я сумел выяснить, как подготовить сводную статистику по объекту в качестве объекта-гроба, пройдя по различным функциям моего набора данных.

library(skimr)
library(GridExtra)
library(ggplot2)
library(dplyr)
mysumplots <- list() # new empty list

for (i in seq(2,ncol(dataset))){
  local({
    i <-         
    sampletable <- data.frame(skim((dataset[ ,i]))) #creates a skim data frame 
    summarystats<-select(sampletable, stat, formatted) #select relevant df columns
    summarystats<-slice(summarystats , 4:10) #select relevant stats
    p3<-tableGrob(summarystats, rows=NULL) #converts df into a tableGrob

    mysumplots[[i]] <<- p3 # summary #appends the grob of to a list of summary table grobs
  })
}

do.call("grid.arrange", c(mysumplots, ncol=3)) # use grid arrange to plot all my grobs

Для этого создается скользящий кадр данных каждого столбца (объекта), затем я выбираю соответствующую статистику и присваиваю этот гроб переменной p3, которая затем итеративно добавляется в список табличных столбцов для каждого объекта. Затем я использовал gridarrange, чтобы распечатать все таблицы Grobs!

Другие вопросы по тегам