【发布时间】:2016-01-04 12:53:44
【问题描述】:
我正在使用分段包,但在从函数中调用 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(在这种情况下是@ 987654329@ 函数),但直接跳到全局范围。
我确信问题与 R 的范围规则的一些微妙之处有关。如果我能找到一个快速解决方案,防止我用这种极端情况困扰包作者,那就太好了。
谢谢, 安德鲁。
【问题讨论】:
标签: r