我们能否在R中生成已加载包的列表?

10

是否有一种在R中生成所需软件包列表的函数?类似于 "pip freeze",这样我们可以快速复制环境?


2
你是指 search() 吗? - Rich Scriven
6
sessionInfo()可能会引起兴趣。 - Dason
你的意思是在R解释器中运行特定代码后生成该列表,还是静态分析代码而不运行它? - smci
2个回答

6

感谢您提供明确的信息。既然您提到了复制环境,以下是一些关于可用软件包的可用性和命名空间的信息。

除了@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>

6
如果你的意思是“运行所述代码后”:
- loadedNamespaces() (只获取包名称) 或者 - search()(正如@Richard Scriven所说)
但是,如果你的意思是“在不运行该代码的情况下静态分析该代码”,我不知道有什么工具,但使用egrep -R -w'(require|include|source)' *.r的输出结果可以得到你想要的内容(显然还会捕捉未使用或被注释掉的包)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接