7

是否有一个函数可以在 R 中生成所需包的列表?类似于“pip freeze”的东西,所以我们可以快速复制环境?

4

2 回答 2

5

谢谢你不含糊。由于您提到了复制环境,这里有一些关于这些可用包的可用性和命名空间的信息。

除了@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>
于 2014-05-03T05:37:58.647 回答
4

如果您的意思是“在运行相关代码之后”:

  • loadedNamespaces()(仅适用于包名称,或)
  • search()正如@Richard Scriven 所说

但是如果你的意思是静态分析有问题的代码而不运行它,我不知道有什么工具,但是调整输出egrep -R -w '(require|include|source)' *.r应该会给你想要的东西(显然也会选择包含但未使用或注释掉的包)

于 2014-05-03T01:48:14.730 回答