R语言运行时间序列示例报错:filter方法不适用于numeric类型对象
报错原因与解决方法
报错原因
- 核心问题是函数命名冲突:你当前的R会话中大概率加载了
dplyr或tidyverse包,这些包中的filter()函数会覆盖基础包stats里的同名函数。dplyr::filter的作用是筛选数据框的行,仅支持数据框类输入;而你传入的w是数值向量,不符合该函数的参数要求,因此触发报错。
解决方法
- 方法一:明确指定使用stats包的filter函数(最可靠)
在调用filter时加上包名前缀,强制使用基础包的时间序列过滤函数:w = rnorm(150,0,1) # 50 extra to avoid startup problems x = stats::filter(w, filter=c(1,-.9), method="recursive")[-(1:50)] # remove first 50 plot.ts(x, main="autoregression") - 方法二:卸载冲突包
如果当前会话不需要dplyr或tidyverse的功能,可执行以下命令卸载冲突包,恢复默认的stats::filter:detach("package:dplyr", unload = TRUE) # 若加载的是tidyverse,执行 detach("package:tidyverse", unload = TRUE) - 方法三:调整包加载顺序
确保先运行时间序列代码,再加载dplyr/tidyverse包;或者重启R会话,在未加载冲突包的情况下运行目标代码。
内容的提问来源于stack exchange,提问作者JCVD
相关产品推荐
相关产品推荐

