Я не могу передать графический объект в ggplot, и одним из симптомов проблемы является то, что он распознается как тип environment
, а не list
, но я не уверен, что это является причиной проблемы.
Я использую пакет gamlj
для создания линейной модели некоторых данных. Функция gamljGLM
возвращает модель и график, который должен быть совместим с функциями ggplot. Другими словами, график, сгенерированный gamljGLM
, должен возвращать TRUE
для is.ggplot()
, но для меня это не так. Кроме того, при тестировании объекта графика для его типа я получаю, что typeof()
возвращает environment
, хотя в принципе он должен возвращать list
.
Шаги для воспроизведения проблемы
- Установка пакета
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
.
- Передача объекта графика в
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 пакет / функция. Есть идеи?