这个问题有些是关于此问题的后续。考虑以下示例:
set.seed(1)
x <- cumsum(rnorm(10))
y <- stats::arima(x, order = c(1, 0, 0))
length(stats::fitted(y))
[1] 0
目前为止还不错: 返回零是因为R不知道如何在Arima
类的对象上使用stats::fitted
。
接下来,在我的代码中,我需要forecast
包中的一个函数。我不会将包附加到环境中,只需使用::
符号加载它即可。
在下面的代码中,我将直接使用requireNamespace
加载它。
requireNamespace("forecast", quietly = TRUE)
length(stats::fitted(y))
[1] 10
突然间相同的命令返回不同的结果。我明白为什么会发生这种情况(并希望我的说法是正确的):通过加载
forecast
包,将新的方法fitted.Arima
加载到命名空间中作为通用函数fitted
的一个方法,从而导致不同的结果。对我来说,这种行为相当令人烦恼:有没有办法选择一个特定的
fitted
方法?我阅读了这一章,但没有找到如何解决这个问题。我还尝试从命名空间卸载
forecast
包,但没有成功。unloadNamespace("forecast")
length(stats::fitted(y))
[1] 10
看起来,一旦我加载了这个包,就不能再使用旧的fitted
方法。我想知道如何处理这些情况。
编辑
在unloadNamespace("forecast")
之后,正如评论中指出的那样,我得到了这个:
isNamespaceLoaded("forecast")
[1] FALSE
但是
methods
仍包括fitted.Arima
。
requireNamespace
之前执行methods(fitted)
,则会看到所有已加载的方法。在执行unloadNamespace
之后,您可以执行isNamespaceLoaded("forecast")
,它将返回FALSE
。methods(fitted)
显示的结果与之前相同。这很奇怪。 - patLstats:::fitted.default(y)
会出现错误:"找不到函数..."。 - Cetttlength(stats:::fitted.default(y))
返回的是0
)。你遇到的具体错误是什么? - RolandASc