Используйте более старую версию ggplot в файле сценария R

У меня установлена ​​ggplot2 3.4.0 на Ubuntu 22.04, но по некоторым причинам я хотел бы использовать более старую версию ggplot2 3.3.6.

library(ggplot2, lib.loc = "~/R/ggplot336/") 

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

library(ggplot2, lib.loc = "~/R/ggplot336/") 
ggimage::geom_image()

Я получил следующее сообщение об ошибке:

Ошибка в значении [3L] : Пакет ‘ggplot2’ версии 3.4.0 не может быть выгружен: Ошибка в unloadNamespace(package): пространство имен «ggplot2» импортировано «ggfun», «ggplotify», «ggimage», поэтому его нельзя выгрузить

Редактировать

  1. Новый старт
  2. Откройте мой файл сценария R со следующими 3 строками:
sessionInfo()
library(ggplot2, lib.loc = "~/R/ggplot336/") 
ggimage::geom_image()

Когда я запускаю первую строку, sessionInfo() прежде чем делать что-либо еще. Мы можем видеть ggplot2_3.4.0 там. Может ли это быть функцией Rstudio или проблемой?

R version 4.2.2 Patched (2022-11-10 r83330)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 22.04.1 LTS

Matrix products: default
BLAS:   /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.10.0
LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.10.0

locale:
 [1] LC_CTYPE=en_AU.UTF-8       LC_NUMERIC=C               LC_TIME=en_AU.UTF-8       
 [4] LC_COLLATE=en_AU.UTF-8     LC_MONETARY=en_AU.UTF-8    LC_MESSAGES=en_AU.UTF-8   
 [7] LC_PAPER=en_AU.UTF-8       LC_NAME=C                  LC_ADDRESS=C              
[10] LC_TELEPHONE=C             LC_MEASUREMENT=en_AU.UTF-8 LC_IDENTIFICATION=C       

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

loaded via a namespace (and not attached):
 [1] Rcpp_1.0.9         highr_0.9          pillar_1.8.1       compiler_4.2.2    
 [5] R.utils_2.12.2     R.methodsS3_1.8.2  yulab.utils_0.0.5  tools_4.2.2       
 [9] digest_0.6.30      evaluate_0.18      jsonlite_1.8.3     lifecycle_1.0.3   
[13] tibble_3.1.8       gtable_0.3.1       ggimage_0.3.1      R.cache_0.16.0    
[17] pkgconfig_2.0.3    rlang_1.0.6        reprex_2.0.2       DBI_1.1.3         
[21] cli_3.4.1          ggplotify_0.1.0    rstudioapi_0.14    magick_2.7.3      
[25] yaml_2.3.6         xfun_0.35          fastmap_1.1.0      knitr_1.41        
[29] withr_2.5.0        dplyr_1.0.10       styler_1.8.1       generics_0.1.3    
[33] vctrs_0.5.1        fs_1.5.2           gridGraphics_0.5-1 grid_4.2.2        
[37] tidyselect_1.2.0   glue_1.6.2         R6_2.5.1           processx_3.8.0    
[41] fansi_1.0.3        rmarkdown_2.18     clipr_0.8.0        callr_3.7.3       
[45] ggplot2_3.4.0      purrr_0.3.5        magrittr_2.0.3     ps_1.7.2          
[49] htmltools_0.5.3    scales_1.2.1       assertthat_0.2.1   colorspace_2.0-3  
[53] utf8_1.2.2         munsell_0.5.0      ggfun_0.0.9        R.oo_1.25.0       

Может, попробовать detach(ggplot2) перед запуском скрипта?

jared_mamrot 28.11.2022 01:24

Попробовал, получилось Error in detach(ggplot2) : invalid 'name' argument

Zhiqiang Wang 28.11.2022 01:31

Спасибо, но пока я открываю существующий файл сценария, проблема остается.

Zhiqiang Wang 28.11.2022 01:55

Есть ли у вас какие-либо library() вызовы перед этим в существующем скрипте? У вас есть какой-нибудь пакет, который автоматически загружается при запуске? У вас может быть загружена только одна версия пакета за раз, поэтому вполне вероятно, что какой-то другой пакет, вероятно, автоматически загружает более новую версию ggplot, прежде чем вы сможете загрузить старую.

MrFlick 28.11.2022 04:39

Новое начало. Я отредактировал свой вопрос и добавил дополнительную информацию. Спасибо

Zhiqiang Wang 28.11.2022 05:25
Стоит ли изучать 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 называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
5
223
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Похоже, что R studio загружает все предыдущие библиотеки из предыдущего сеанса. Возможно, что-то осталось в .RData или .Rhistory. Новый запуск R должен иметь очень мало загруженных библиотек.

Вот мое новое начало:

sessionInfo()
R version 4.2.2 (2022-10-31)
Platform: x86_64-apple-darwin17.0 (64-bit)
Running under: macOS Monterey 12.6.1

Matrix products: default
LAPACK: /Library/Frameworks/R.framework/Versions/4.2/Resources/lib/libRlapack.dylib

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

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

loaded via a namespace (and not attached):
[1] compiler_4.2.2 tools_4.2.2  

В настройках Rstudio вы должны увидеть этот экран:

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

Да, но когда я открываю файл сценария R, содержащий код типа ggimage::geom_image(), без специальной загрузки каких-либо пакетов. Может ли кто-нибудь попробовать это на своей машине: добавить эту строку в файл сценария, сохранить ее, заново запустить rstudio, открыть файл сценария, затем sessionInfo() и посмотреть, что произойдет? Спасибо

Zhiqiang Wang 29.11.2022 00:58
Ответ принят как подходящий

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

Проблема заключается в :: (двойное двоеточие) с пакетами, использующими ggplot2, например ggimage в моем примере. Похоже, что RStudio автоматически загружает некоторые зависимые пакеты при открытии файла сценария. Один из способов решить эту проблему для моей работы сейчас — удалить ::, но вместо этого использовать library(), а затем функцию (geom_image).

Это решило мою проблему, но я до сих пор не понимаю, почему RStudio ведет себя таким образом.

Если :: (двойное двоеточие) необходимо, прокомментируйте строки, содержащие ::, затем после загрузки более старой версии ggplot2 раскомментируйте эти строки. Немного неудобно, но это работает для меня.

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