首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R:测试函数从封闭环境中获取哪些对象

R:测试函数从封闭环境中获取哪些对象
EN

Stack Overflow用户
提问于 2019-05-21 00:55:11
回答 1查看 94关注 0票数 5

在定义R函数时,我有时会忽略它依赖于封闭环境中的对象。类似于:

代码语言:javascript
复制
a <- 1
fn <- function(x) x + a

如果无意中发生这种情况,可能会导致难以调试的问题。

有没有一种简单的方法来测试fn是否使用封闭环境中的对象?

类似于:

代码语言:javascript
复制
test(fn=fn, args=list(x=1))
## --> uses 'a' from enclosing environment
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-21 02:00:46

一种可能是使用codetools包中的findGlobals函数,该函数旨在:

查找闭包使用的全局函数和变量

这在您的示例中是有效的:

代码语言:javascript
复制
#install.packages('codetools')
codetools::findGlobals(fn)
[1] "+" "a"

如果我们在函数中定义a,它就会消失:

代码语言:javascript
复制
fn <- function(x) {
    a = 1
    x + a
}

codetools::findGlobals(fn)
[1] "{" "+" "="

但我没有在更复杂的函数中使用过它,所以我不能说在更复杂的函数中它会有多精确。这些文档附带以下警告:

结果是一个近似值。R语义只允许标识可能是局部的变量(以及假定不使用assign和rm的事件)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56225221

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档