跟踪R中的功能依赖性

时间:2015-03-04 11:53:23

标签: r

有没有办法以编程方式分析在另一个函数中调用哪些函数?让我们说我有一个包含功能的包:

a <- function(c, d) c + d
b <- function(e, f) e + f

x <- function(g, h) {
     c(
       a(g - h, g + h),
       b(g * h, g / h)
       )
     }

是否有类似analyzeFunction(x)的内容会返回ab(来自x的函数)?

1 个答案:

答案 0 :(得分:1)

codetools::findGlobals()基本上可以满足您的要求,但它会返回所有直接由x()调用的函数:

library(codeTools)
findGlobals(x)
# [1] "-" "*" "/" "{" "+" "a" "b" "c"

如果您希望将结果告知仅查看.GlobalEnv中的函数,或者只查看在包外定义的函数,则可以执行以下操作

vv <- findGlobals(x)
intersect(vv, ls(.GlobalEnv))
# [1] "a" "b"
vv[!grepl("package|namespace", sapply(vv, find))]
# [1] "a" "b"