Почему объекты маскируются после запуска library(renv) в R?

#r #renv #r-environment

#r #renv #r-среда

Вопрос:

Я следую этим шагам, как в этом рабочем процессе здесь:

  1. renv::init()
  2. работаем как обычно и устанавливаем новые пакеты
  3. renv::snapshot()

Проблема, с которой я сталкиваюсь, заключается в том, что во время выполнения library(renv) многие функции маскируются, например load, поэтому мне приходится повторно маскировать их по всему моему коду, чтобы заставить его снова работать. Например base::load(...) , есть ли способ избежать этой маскировки?

Здесь журналы во время выполнения library(renv) :

 > 
> Attaching package: ‘renv’
> 
> The following object is masked from ‘package:stats’:
> 
>     update
> 
> The following objects are masked from ‘package:utils’:
> 
>     history, upgrade
> 
> The following objects are masked from ‘package:base’:
> 
>     load, remove
 

Ответ №1:

renv разработан с расчетом на то, что пользователи обычно всегда будут использовать renv:: префикс при обращении к его функциям; например

 renv::install()
 

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

Если вы все еще хотите загружаться renv как обычный пакет R, я бы рекомендовал использовать:

 library(renv, include.only = <...>)
 

чтобы убедиться, что в пути поиска размещены только те функции, которые вам нужны.

Ответ №2:

Насколько я понимаю, этот exclude аргумент может решить вашу проблему. Нравится:

 library(renv, exclude = c("load", "update"))
 

Более безопасным будет использовать методы непосредственно для таких конфликтов с помощью ::.