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

Есть ли функция, с помощью которой мы можем создать список необходимых пакетов в R? Что-то похожее на «заморозку пипсов», чтобы мы могли быстро дублировать среды?


person Max    schedule 03.05.2014    source источник
comment
Вы имеете в виду search()?   -  person Rich Scriven    schedule 03.05.2014
comment
sessionInfo() может быть интересно   -  person Dason    schedule 03.05.2014
comment
Вы имели в виду создание этого списка а) после запуска определенного кода в интерпретаторе R или б) статический анализ кода без его запуска?   -  person smci    schedule 22.11.2016


Ответы (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>
person Rich Scriven    schedule 03.05.2014

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

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

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

person smci    schedule 03.05.2014