例如,如果运行script.A
:
library(ggplot2)
a <- 12
然后script.B
library(ggplot2)
b <- runif(100)
qplot(b)
我可以告诉script.A
实际上没有使用ggplot2
,而script.B
却没有。
答案 0 :(得分:5)
正常加载库并跟踪包环境(以及命名空间中)中的所有函数。我将使用一个小辅助函数来执行此操作:
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 :(得分:0)
试试这个:
1)首先针对您 NOT 想要测试的每个包发出library()
调用。在这种情况下,只有一个包是我们要测试的包,所以我们可以跳过这一步。
2)使用library
dummied out
library <- list
source("script.A")
rm(library) # restore
如果没有错误,则脚本不依赖于包。