Графический объект распознается как тип окружения, а не как список, поэтому он несовместим с ggplot, хотя должен быть - PullRequest
0 голосов
/ 03 августа 2020

Я не могу передать графический объект в ggplot, и одним из симптомов проблемы является то, что он распознается как тип environment, а не list, но я не уверен, что это является причиной проблемы.

Я использую пакет gamlj для создания линейной модели некоторых данных. Функция gamljGLM возвращает модель и график, который должен быть совместим с функциями ggplot. Другими словами, график, сгенерированный gamljGLM, должен возвращать TRUE для is.ggplot(), но для меня это не так. Кроме того, при тестировании объекта графика для его типа я получаю, что typeof() возвращает environment, хотя в принципе он должен возвращать list.

Шаги для воспроизведения проблемы

  1. Установка пакета gamlj (успешно выполнено в версиях R 3.6.3 или 4.0.2)
## first, install 'devtools' package
install.packages("devtools")

## second, install 'gamlj'
devtools::install_github("gamlj/gamlj")
Загрузить данные
library(tidyverse)

day_1 <- rnorm(1000, mean = 77, sd = 18)
day_2 <- rnorm(1000, mean = 74, sd = 19)
day_3 <- rnorm(1000, mean = 80, sd = 5)
day_4 <- rnorm(1000, mean = 76, sd = 18)


df <- 
  cbind(day_1, day_2, day_3, day_4) %>%
  as_tibble() %>%
  gather(., key = day, value = mood, day_1:day_4) %>%
  mutate_at(vars(day), factor)

> df

## # A tibble: 4,000 x 2
##    day    mood
##    <fct> <dbl>
##  1 day_1  88.2
##  2 day_1  66.7
##  3 day_1  67.0
##  4 day_1  93.8
##  5 day_1  70.6
##  6 day_1  97.9
##  7 day_1  81.9
##  8 day_1  91.2
##  9 day_1  69.4
## 10 day_1  48.4
## # … with 3,990 more rows
Смоделируйте данные, используя gamlj::gamljGLM
p <- gamljGLM(df_as_df, 
              formula = formula("mood ~ day"), 
              plotError = "ci", 
              plotHAxis = "day")

> p

## GENERAL LINEAR MODEL

##  Model Info                                    
##  ───────────────────────────────────────────── 
##    Info                                        
##  ───────────────────────────────────────────── 
##    Estimate          Linear model fit by OLS   
##    Call              mood ~ 1 + day            
##    R-squared                      0.01558849   
##    Adj. R-squared                 0.01484944   
##  ───────────────────────────────────────────── 


##  MODEL RESULTS

##  ANOVA Omnibus tests                                                        
##  ────────────────────────────────────────────────────────────────────────── 
##                SS            df      F           p             η²p         
##  ────────────────────────────────────────────────────────────────────────── 
##    Model          16406.19       3    21.09267    < .0000001    0.0155885   
##    day            16406.19       3    21.09267    < .0000001    0.0155885   
##    Residuals    1036048.90    3996                                          
##    Total        1052455.08    3999                                          
##  ────────────────────────────────────────────────────────────────────────── 


##  Fixed Effects Parameter Estimates                                                                                                          
 ## ─────────────────────────────────────────────────────────────────────────────────────────────────────────## ───────────────────────────────── 
##    Names          Effect           Estimate      SE           Lower        Upper         β              ## df      t              p            
 ## ─────────────────────────────────────────────────────────────────────────────────────────────────────────## ───────────────────────────────── 
##    (Intercept)    (Intercept)      76.9554387    0.2545935    76.456293    77.4545841     0.00000000    ## 3996    302.2678295    < .0000001   
##    day1           day_2 - day_1    -2.1270930    0.7200993    -3.538889    -0.7152967    -0.13111742    ## 3996     -2.9538885     0.0031563   
##    day2           day_3 - day_1     3.3874303    0.7200993     1.975634     4.7992266     0.20880663    ## 3996      4.7041156     0.0000026   
##    day3           day_4 - day_1    -0.6973011    0.7200993    -2.109097     0.7144952    -0.04298275    ## 3996     -0.9683401     0.3329331   
 ## ─────────────────────────────────────────────────────────────────────────────────────────────────────────## ───────────────────────────────── 

При запуске p в соответствии с моделью, приведенной выше, он автоматически отображает aws график. Кроме того, график может быть вызван напрямую p$descPlot$plot.

p$descPlot$plot

  1. Передача объекта графика в ggplot не удалась
p$descPlot$plot + xlab("blah_x_label")

Error in p$descPlot$plot + xlab("blah_x_label") : 
  non-numeric argument to binary operator

Итак, я проверяю это:

> is.ggplot(p)

## [1] FALSE

И, кроме того:

> typeof(p)

## [1] "environment"   ## in principle, this should be 'list'

Подводя итог

Этот график должен быть типа ggplot, и друг добился успеха в применении функций ggplot к p$descPlot$plot, потому что функция предназначена для построения объекта ggplot. Но для меня это не удается. Я знаю, что это конкретный случай c с конкретным пакетом c. Я связался с сопровождающим пакета и даже открыл проблему в его проекте на github, но пока не получил ответа. Я также публикую этот вопрос здесь, так как надеюсь, что, возможно, эта проблема, хотя и указана c, связана с более общим принципом объектов ggplot, который может быть решен независимо от того, знаком ли вам этот конкретный c пакет / функция. Есть идеи?

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