8

例如,如果运行script.A

 library(ggplot2)
 a <- 12 

接着script.B

library(ggplot2)
b <- runif(100)
qplot(b) 

我可以说script.A实际上并没有使用ggplot2,而script.B确实使用了。

4

2 回答 2

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

请注意,代码已中断。

于 2013-08-19T12:02:36.757 回答
0

尝试这个:

1)首先为您不想测试的每个包发出library()调用。在这种情况下,只有一个包是我们希望测试的包,因此我们可以跳过此步骤。

2) 运行脚本并library删除:

library <- list
source("script.A")
rm(library) # restore

如果您没有收到错误,则脚本不依赖于包。

于 2013-08-18T17:15:38.517 回答