如何判断我的 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 文件上都运行良好。
随着我的代码从一个版本演进到另一个版本,我知道有一些包我已经找到 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 文件上都运行良好。