«Ошибка в Ops.data.frame(guide_loc, Panel_loc): ‘==’ определено только для кадров данных одинакового размера» при использовании draw() из Gratia для рисования GAM в r

Я пытаюсь нарисовать GAM в R, используя приведенный ниже код. Этот код всегда работал, и я мог нарисовать частичный эффект моего сглаженного термина, но случайно он больше не работает, постоянно вызывая эту ошибку:

Error in Ops.data.frame(guide_loc, panel_loc) : 
  ‘==’ only defined for equally-sized data frames

Мой код выглядит следующим образом:

library(mgcv)
library(gratia)

gam1 <- mgcv::gam(mpg ~ cyl +
                          s(disp), data = mtcars, method = "REML")

draw(gam1)

# directly drawing function from the package also triggers the error

gratia::draw(gam1)


Сообщение об ошибке, которое я получаю, не имеет для меня смысла, поскольку я не понимаю, как оно влияет на размер кадра данных (или, по крайней мере, не на несколько кадров данных, как следует из формулировки).

Эта ошибка впервые возникла, когда я попытался взять производные модели и вместо этого нарисовать их с помощью следующего кода:


derivatives1 <- derivatives(gam1,
                             term = "s(disp)",
                            order = 1L,
                             type = "central",
                             n = 250,
                             eps = 1,
                             interval = "simultaneous",
                             n_sim = 500000,
                             unconditional = TRUE)

draw(derivatives1)


который рисует ту же ошибку:

Error in Ops.data.frame(guide_loc, panel_loc) : 
  ‘==’ only defined for equally-sized data frames

Но теперь эта ошибка возникает каждый раз, когда я пытаюсь нарисовать игру или ее производные. Я попытался перезапустить r и выгрузить пакеты, чтобы убедиться, что это не связано с конфликтом пакетов, но ошибка все равно появляется.

Как я могу устранить эту ошибку и нарисовать свои GAM и производные от сглаживаний GAM?

Обновлять

Вот информация о моей сессии:

R version 4.3.3 (2024-02-29)
Platform: aarch64-apple-darwin20 (64-bit)
Running under: macOS Sonoma 14.4

Matrix products: default
BLAS:   /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib 
LAPACK: /Library/Frameworks/R.framework/Versions/4.3-arm64/Resources/lib/libRlapack.dylib;  LAPACK version 3.11.0

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

time zone: America/New_York
tzcode source: internal

attached base packages:
[1] grid      stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
 [1] kableExtra_1.3.4   mediation_4.5.0    mvtnorm_1.2-4      MASS_7.3-60.0.1    sandwich_3.1-0     schoenberg_2.0.3  
 [7] mgcViz_0.1.11      qgam_1.3.4         viridis_0.6.5      viridisLite_0.4.2  tidymv_3.4.2       scales_1.3.0      
[13] gamm4_0.2-6        mgcv_1.9-1         nlme_3.1-164       modelsummary_1.4.1 sjPlot_2.8.14      ggpubr_0.6.0      
[19] gridExtra_2.3      lme4_1.1-35.2      Matrix_1.6-5       countrycode_1.5.0  labelled_2.11.0    haven_2.5.4       
[25] lubridate_1.9.2    forcats_1.0.0      stringr_1.5.1      dplyr_1.1.4        purrr_1.0.2        readr_2.1.5       
[31] tidyr_1.3.1        tibble_3.2.1       ggplot2_3.5.0      tidyverse_2.0.0    gratia_0.9.0      
     

Обновление 2

Вот отслеживание ошибки из чистого сеанса, в котором загружаются только mgcv и gratia:

10: stop(gettextf("%s only defined for equally-sized data frames", 
        sQuote(.Generic)), domain = NA)
9: Ops.data.frame(guide_loc, panel_loc)
8: unlist(guide_loc == panel_loc)
7: add_guides(gt, guides == "collect")
6: plot_table.ggplot(X[[i]], ...)
5: FUN(X[[i]], ...)
4: lapply(x$plots, plot_table, guides = guides)
3: build_patchwork(plot, plot$layout$guides %||% "auto")
2: print.patchwork(x)
1: (function (x, ...) 
   UseMethod("print"))(x)

и вот информация о сеансе для этого чистого сеанса:

R version 4.3.3 (2024-02-29)
Platform: aarch64-apple-darwin20 (64-bit)
Running under: macOS Sonoma 14.4

Matrix products: default
BLAS:   /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib 
LAPACK: /Library/Frameworks/R.framework/Versions/4.3-arm64/Resources/lib/libRlapack.dylib;  LAPACK version 3.11.0

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

time zone: America/New_York
tzcode source: internal

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] gratia_0.9.0 mgcv_1.9-1   nlme_3.1-164

loaded via a namespace (and not attached):
 [1] Matrix_1.6-5       mvnfast_0.2.8      gtable_0.3.4       dplyr_1.1.4        compiler_4.3.3     tidyselect_1.2.1  
 [7] Rcpp_1.0.12        stringr_1.5.1      tidyr_1.3.1        splines_4.3.3      scales_1.3.0       yaml_2.3.8        
[13] fastmap_1.1.1      lattice_0.22-5     ggplot2_3.5.0      R6_2.5.1           labeling_0.4.3     generics_0.1.3    
[19] patchwork_1.1.3    knitr_1.45         tibble_3.2.1       munsell_0.5.0      RColorBrewer_1.1-3 pillar_1.9.0      
[25] rlang_1.1.3        utf8_1.2.4         stringi_1.8.3      xfun_0.43          cli_3.6.2          withr_3.0.0       
[31] magrittr_2.0.3     digest_0.6.35      grid_4.3.3         rstudioapi_0.16.0  lifecycle_1.0.4    ggokabeito_0.1.0  
[37] vctrs_0.6.5        evaluate_0.23      glue_1.7.0         farver_2.1.1       fansi_1.0.6        colorspace_2.1-0  
[43] purrr_1.0.2        rmarkdown_2.26     tools_4.3.3        pkgconfig_2.0.3    htmltools_0.5.8.1 
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
2 756
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

У вас должна быть либо старая версия {gratia} (хотя я сомневаюсь, что когда-либо видел сообщение об этой ошибке для версии пакета, выпущенной CRAN — если вы установили с GitHub, обновите свой пакет из CRAN, чтобы получить версию 0.9.0 ) или загружен какой-либо другой пакет, который маскирует или иным образом плохо взаимодействует с {gratia}.

С выпуском CRAN {gratia} я не могу воспроизвести вашу проблему.

r$> library(mgcv) 
    library(gratia) 
     
    gam1 <- mgcv::gam(mpg ~ cyl + 
                              s(disp), data = mtcars, method = "REML") 
     
    draw(gam1) 
     
    # directly drawing function from the package also triggers the error 
     
    gratia::draw(gam1)                                                          
Loading required package: nlme
This is mgcv 1.9-1. For overview type 'help("mgcv-package")'.

r$> derivatives1 <- derivatives(gam1, 
                                 term = "s(disp)", 
                                order = 1L, 
                                 type = "central", 
                                 n = 250, 
                                 eps = 1, 
                                 interval = "simultaneous", 
                                 n_sim = 500000, 
                                 unconditional = TRUE) 
     
    draw(derivatives1)                                                          
Warning message:
The `term` argument of `derivatives()` is deprecated as of gratia 0.8.9.9.
ℹ Please use the `select` argument of `derivativess()` instead.
This warning is displayed once every 8 hours.
Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
generated. 

(Вы можете игнорировать предупреждение; если оно вас беспокоит, измените term = "s(disp)" на select = "s(disp)".

Спасибо за ответ и объяснение. Как ни странно, я попытался перезапустить R, загрузить из CRAN, чтобы убедиться, что я обновился до 0.9.0, и не загружено никаких других пакетов, кроме базового r, но я все равно получаю ту же ошибку: Error in Ops.data.frame(guide_loc, panel_loc) : ‘==’ only defined for equally-sized data frames

flâneur 22.04.2024 16:24

Можете ли вы разместить свой sessionInfo() в своем вопросе, пожалуйста: было бы хорошо знать, используете ли вы последнюю версию R, а если нет, это может ограничить версию Gratia, до которой вы можете установить/обновить.

Gavin Simpson 22.04.2024 21:43

Я обновил вопрос информацией о сеансе. Я действительно использовал немного более старую версию, но, к сожалению, после обновления ошибка все еще возникает.

flâneur 23.04.2024 00:53

@flâneur, можешь попробовать запустить чистую сессию; у вас загружено довольно много пакетов, которые не предназначены для благодарности. В чистом сеансе просто загрузите mgcv и gratia и запустите свою модель. Если ошибка не исчезнет, ​​значит, что-то не так, но я подозреваю, что вы обнаружите, что ошибка исчезла, и если это так, это означает, что один из других загруженных вами пакетов является причиной проблемы. Сузить это было бы полезно (поскольку я мог бы что-то с этим сделать), но вы, возможно, не захотите тратить все это время на загрузку комбинаций пакетов, чтобы определить источник ошибки.

Gavin Simpson 23.04.2024 12:41

@flâneur Еще одним полезным выводом будет отслеживание момента, когда вы получили ошибку. Сразу после того, как вы получите сообщение об ошибке, запустите traceback() и опубликуйте результат в своем вопросе, и я посмотрю, выделится ли что-нибудь.

Gavin Simpson 23.04.2024 12:43

Спасибо за ваше постоянное терпение и преданность этому делу. Я обновил вопрос, добавив информацию о трассировке и сеансе для чистого сеанса (в данном случае также совершенно новый проект r и файл .rmd).

flâneur 23.04.2024 14:48

Вероятно, это проблема с ggplot и/или патчворком. Обязательно обновите все свои пакеты; ваш ggplot устарел, например, текущая версия 3.5.1. В общем, R, начните новый чистый сеанс, запустите update.packages(ask = FALSE, checkBuilt = TRUE, Ncpus = 3) настройку Ncpus для любого количества ядер ЦП, которое вы хотите использовать параллельно, и дайте ему поработать. Почти наверняка это проблема из-за несовместимости пакетов, поскольку не все из них обновлены.

Gavin Simpson 23.04.2024 17:25

Это сработало! Огромное вам спасибо за то, что нашли время разобраться в этой простой ошибке с моей стороны. Я действительно ценю это. Кроме того, я должен сказать, что, помимо всего прочего, ваш gratia пакет просто звездный!

flâneur 24.04.2024 04:19

Спасибо @flâneur и рад, что мы это выяснили

Gavin Simpson 24.04.2024 07:50

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