Можем ли мы создать список загруженных пакетов в R?

Есть ли функция, где мы можем генерировать список необходимых пакетов в R? Что-то похожее на "pip freeze", чтобы мы могли быстро дублировать окружение?

2 ответа

Решение

Спасибо, что не расплывчаты. Поскольку вы упомянули дублирующиеся среды, вот некоторая информация о доступности и пространствах имен этих доступных пакетов.

В дополнение к этим функциям, упомянутым @smci, .Packages перечислит все пакеты, доступные в пути расположения библиотеки lib.loc, А также find.package покажет вам путь к пакету. Имейте в виду, что find.packages может представлять проблемы при определении доступности пакета. require рекомендуемый метод (см. ?find.package для объяснения).

> x <- .packages(TRUE)
> head(x)
# [1] "assertthat"      "BH"              "car"             "data.table"     
# [5] "digest"          "dplyr"
> f <- find.package(x)
> sample(f, 5)
# [1] "/home/richard/R/x86_64-pc-linux-gnu-library/3.1/latticeExtra"  
# [2] "/home/richard/R/x86_64-pc-linux-gnu-library/3.1/Lahman"        
# [3] "/home/richard/R/x86_64-pc-linux-gnu-library/3.1/microbenchmark"
# [4] "/usr/lib/R/library/tools"                                      
# [5] "/home/richard/R/x86_64-pc-linux-gnu-library/3.1/knitr" 

Для получения списка сред с пространствами имен для этих пакетов в x, вы можете использовать (среди других) getNamespace

> sapply(x, getNamespace)[1:3]
# $assertthat
# <environment: namespace:assertthat>

# $BH
# <environment: namespace:BH>

# $car
# <environment: namespace:car>

Если вы имели в виду "после запуска рассматриваемого кода":

  • loadedNamespaces() (только для имен пакетов или)
  • search() как сказал @Richard Scriven

но если вы имели в виду статический анализ рассматриваемого кода без его запуска, то нет никакого инструмента, кроме искажения вывода egrep -R -w '(require|include|source)' *.r должен дать вам то, что вы хотите (очевидно, также подберет пакеты, включенные, но не использованные или закомментированные)

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