【问题标题】:no applicable method for 'filter' applied to an object of class "c('double', 'numeric')" for a time serie对于时间序列,没有适用于 \'filter\' 的方法应用于 \"c(\'double\', \'numeric\')\" 类的对象
【发布时间】:2022-10-05 14:48:44
【问题描述】:

嘿,我愿意尝试第 4 版时间序列分析及其应用手册(ex.10)中的示例。当我运行 R 书中的代码时,出现此错误;

UseMethod("filter") 中的错误: 没有适用于“过滤器”的方法应用于“c('double','numeric')”类的对象

这是代码;

w = rnorm(150,0,1) # 50 extra to avoid startup problems 
x = filter(w, filter=c(1,-.9), method="recursive")[-(1:50)] # remove first 50 
plot.ts(x, main="autoregression")

您知道出了什么问题以及如何解决吗?

【问题讨论】:

  • 你可能已经加载了包dplyr,它有一个filter 函数。为基本 R 函数使用限定名称 stats::filter

标签: r filter compiler-errors time-series


【解决方案1】:

当加载另一个具有filter 函数的非基础 R 包时,就会发生这种情况。

dplyr 是问题错误的主要负责人。不是因为这个包有什么问题,而是恰恰相反,因为它所属的 tidyverse 被广泛采用,以至于stats::filterdplyr::filter 之间的冲突是迄今为止最常见的情况。

第一个示例在新的 R 会话中运行。

w <- rnorm(150,0,1) # 50 extra to avoid startup problems 
x <- filter(w, filter=c(1,-.9), method="recursive")[-(1:50)] # remove first 50 
plot.ts(x, main="autoregression")

创建于 2022 年 10 月 2 日,reprex v2.0.2

错误

现在加载包dplyr 并运行完全相同的代码。 R 的命名空间加载代码预测包之间的冲突,并且警告用户两个对象被包stats 屏蔽,其中一个是filter,另外4 个来自包base

library(dplyr)
#> 
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#> 
#>     filter, lag
#> The following objects are masked from 'package:base':
#> 
#>     intersect, setdiff, setequal, union

w <- rnorm(150,0,1) # 50 extra to avoid startup problems 
x <- filter(w, filter=c(1,-.9), method="recursive")[-(1:50)] # remove first 50 
#> Error in UseMethod("filter"):  
#>   no applicable method for 'filter' applied to an object of class "c('double', 'numeric')"

创建于 2022 年 10 月 2 日,reprex v2.0.2

解决方案

解决方案是使用限定名称stats::filter

library(dplyr)
#> 
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#> 
#>     filter, lag
#> The following objects are masked from 'package:base':
#> 
#>     intersect, setdiff, setequal, union

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")

创建于 2022-10-02,reprex v2.0.2

【讨论】:

  • 非常感谢,从来不知道这个限定名
猜你喜欢
  • 2021-08-17
  • 1970-01-01
  • 2021-07-21
  • 1970-01-01
  • 1970-01-01
  • 2019-07-22
  • 1970-01-01
  • 2014-09-15
  • 1970-01-01
相关资源
最近更新 更多