【问题标题】:Using Time Series Models Inside Custom R Functions在自定义 R 函数中使用时间序列模型
【发布时间】:2023-04-09 11:22:01
【问题描述】:

我正在尝试创建一个 R 函数,该函数接受一个 tsibble 和列名,适合一些基本模型,并最终输出一个绘图(尽管绘图部分不是这个问题的主题)。

此时,我无法让以下代码工作:

base_line_models <- function(dataframe, column) {
  col_name <- enquo(column)
  #col_name  <- as.name(column)

  
  df_fit <- dataframe %>%
    model(
      Mean = MEAN(!!col_name),
      `Naïve` = NAIVE(!!col_name),
      Drift = NAIVE((!!col_name) ~ drift())
    )
  
  return(df_fit)
}

base_line_models(souvenirs, 'Sales')
# using the souvenirs tsibble from the fpp3 package

它返回:Error: 'call' must be a quoted call ,我已经搜索但无济于事,对我来说没有意义,因为从我所看到的一切来看,我正在调用该函数。

我感觉这与 R 如何处理函数内部的数据帧有关,所以我也尝试使用 {{column}}{{col_name}} 代替 enquo() / !!column 调用,但这并没有工作。

公平警告,我是 Python 人,所以我的方法可能不是标准的 R 票价。如果我的方法不正确,请随时指出。

【问题讨论】:

标签: r dataframe function time-series tsibble


【解决方案1】:

您的代码基本正确;取消注释第二行 col_name &lt;- as.name(column) 并删除它上面的那一行。我就是这样运行的,没有任何问题。

通常在使用 fpp3 包时,您可能需要考虑使用 tsibbles 而不是标准数据框对象。当您的代码工作时,如果您希望添加额外的功能,最终使用数据框对象遇到问题,请考虑将它们变成 tsibbles。它所需要的只是一个简单的调整

library(fpp3)
library(tidyverse)

data("souvenirs")

base_line_models <- function(dataframe, column) {
  myTsibble <- as_tsibble(dataframe)
  col_name <- as.name(column)
  
  tsibble_fit <- myTsibble %>%
    model(
      Mean = MEAN(!!col_name),
      `Naïve` = NAIVE(!!col_name),
      Drift = NAIVE((!!col_name) ~ drift())
    )
  
  return(tsibble_fit)
}



base_line_models(souvenirs, 'Sales')

【讨论】:

  • 啊,我以为你只能使用!!enquo()。尚未尝试使用 as.name()/!! 组合。谢谢!
猜你喜欢
  • 2020-06-22
  • 1970-01-01
  • 2021-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-27
  • 2016-01-02
  • 1970-01-01
相关资源
最近更新 更多