有没有办法以编程方式分析在另一个函数中调用哪些函数?让我们说我有一个包含功能的包:
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)
的内容会返回a
和b
(来自x
的函数)?
答案 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"