セグメント化されたパッケージを使用していて、関数内からdavies.test()
を呼び出すときに問題が発生しました。完璧に動作し、セグメント化された回帰が2つの統計学的に異なる傾きを有していることを示している囲む環境からデータにアクセスする機能
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
でカプセル化されたデータにアクセスしようとしているような方法であると思われる:それは(この場合はtestit
関数である)囲みスコープにfit
を探していないようですグローバルスコープに直接スキップします。
この問題は、Rのスコープ規則を使用して微妙に関係していると思います。この辺のケースでパッケージ作者に迷惑をかけないようにするための迅速な修正を見つけることができれば、それは素晴らしいことです。
ありがとう、 Andrew。
ありがとうございます。この警告は、テストデータが構築される方法によるものです。関連する問題ではありません。 – DataWookie