例如,如果运行script.A
:
library(ggplot2)
a <- 12
接着script.B
library(ggplot2)
b <- runif(100)
qplot(b)
我可以说script.A
实际上并没有使用ggplot2
,而script.B
确实使用了。
例如,如果运行script.A
:
library(ggplot2)
a <- 12
接着script.B
library(ggplot2)
b <- runif(100)
qplot(b)
我可以说script.A
实际上并没有使用ggplot2
,而script.B
确实使用了。
正常加载库并跟踪包环境(和命名空间)中的所有函数。我将使用一个小的辅助函数来做到这一点:
trap_funs <- function(env)
{
f <- sapply(as.list(env, all.names=TRUE), is.function)
for( n in names(f)[f] ) trace(n, bquote(stop(paste("Script called function", .(n)))), where=env)
}
例子:
library(data.table)
trap_funs(as.environment("package:data.table"))
trap_funs(asNamespace("data.table"))
需要第二条语句来确保诸如此类的调用data.table::xxx()
也被捕获。
例子:
> as.data.table(mtcars)
Tracing as.data.table(mtcars) on entry
Error in eval(expr, envir, enclos) : Script called function as.data.table
请注意,代码已中断。
尝试这个:
1)首先为您不想测试的每个包发出library()
调用。在这种情况下,只有一个包是我们希望测试的包,因此我们可以跳过此步骤。
2) 运行脚本并library
删除:
library <- list
source("script.A")
rm(library) # restore
如果您没有收到错误,则脚本不依赖于包。