当前位置:  开发笔记 > 编程语言 > 正文

从封闭环境访问数据的功能

如何解决《从封闭环境访问数据的功能》经验,为你挑选了0个好方法。

我正在使用分段包,并davies.test()在函数内调用时遇到问题.

考虑以下情况:

library(segmented)

data = data.frame(x = 1:21, y = c(10:1, 0:10))
fit = lm(y ~ x, data = data)
fit.seg = segmented(fit, seg.Z = ~ x)
davies.test(fit.seg, seg.Z = ~ x, alternative = "greater")

这完美地起作用并且表明分段回归具有两个统计上不同的斜率.

现在,如果我把所有这些打包成这样的函数:

testit <- function() {
  data = data.frame(x = 1:21, y = c(10:1, 0:10))
  fit = lm(y ~ x, data)
  fit.seg = segmented(fit, seg.Z = ~ x)
  davies.test(fit.seg, seg.Z = ~ x, alternative = "greater")$p.value
}
testit()

然后它工作正常......

但是如果我fit从全球环境中删除它就会失败.

> rm(fit)
> testit()
 Error in eval(expr, envir, enclos) : object 'fit' not found

问题似乎davies.test在于尝试访问封装的数据的方式fit:它似乎没有fit在封闭范围(在本例中是testit函数)中查找,而是直接跳到全局范围.

我确信这个问题与R的范围规则有些微妙关系.如果我能找到一个快速解决方案,可以防止我使用这个边缘案例麻烦包装作者,那将是很好的.

谢谢,安德鲁.

推荐阅读
mobiledu2402851323
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有