如何判断我的 R 脚本中没有使用哪些包?

How can I tell which packages I am not using in my R script?

随着我的代码从一个版本演进到另一个版本,我知道有一些包我已经找到 better/more 适合手头任务的包,或者它们的目的仅限于一部分我现在已经淘汰的代码。

有什么简单的方法可以判断给定脚本中实际使用了哪些已加载的包?我的 header 开始变得混乱。

我的方法总是关闭我的 R 脚本或 IDE(即 RStudio),然后重新启动它。 在此之后,我 运行 我的函数没有预先加载任何 dependecies/packages 。 这应该会导致各种警告和错误消息告诉您无法找到和执行哪些功能。这将再次提示您需要预先加载哪些包以及可以省略哪些包。

您是否考虑过使用 packrat

例如,

packrat::clean() 将删除未使用的包。

更新时间 2020-04-13

我现在已将引用函数更新为使用抽象语法树 (AST),而不是像以前那样使用正则表达式。这是解决问题的一种更强大的方法(它仍然不是完全铁定的)。这从 funchir 的 0.2.0 版开始可用,现在在 CRAN 上。


我刚刚着手编写一个快速而简单的函数来处理这个我称之为 stale_package_check 的函数,并且我已经将它添加到我的程序包中 (funchir)。

例如,如果我们将以下脚本保存为 test.R:

library(data.table)
library(iotools)
DT = data.table(a = 1:3)

然后(从包含该脚本的目录)运行 funchir::stale_package_check('test.R'),我们将得到:

Functions matched from package data.table: data.table

**No exported functions matched from iotools**

我已经编写了一个命令行脚本来完成这个任务。您可以在 this Github gist 中找到它。我确定它遗漏了一些边缘情况,但它在 R 脚本和 Rmd 文件上都运行良好。