在自定义 R 函数中使用时间序列模型
Using Time Series Models Inside Custom R Functions
我正在尝试创建一个 R 函数,它接受一个 tsible 和列名,适合一些基本模型,并最终输出一个绘图(虽然绘图部分不是这个问题的主题)。
此时,我无法使以下代码工作:
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
它returns:Error: 'call' must be a quoted call
,我已经搜索无果,对我来说没有意义,因为从我所看到的一切来看,我是调用函数。
我觉得这与 R 如何处理函数内部的数据帧有关,所以我也尝试使用 {{column}}
和 {{col_name}}
代替 enquo()
/ !!column
调用,但这没有用。
公平警告,我是一个 Python 人,所以我的方法可能不是标准的 R 票价。如果我的方法不正确,请随时指出。
你的代码基本正确;取消注释第二行 col_name <- 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')
我正在尝试创建一个 R 函数,它接受一个 tsible 和列名,适合一些基本模型,并最终输出一个绘图(虽然绘图部分不是这个问题的主题)。
此时,我无法使以下代码工作:
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
它returns:Error: 'call' must be a quoted call
,我已经搜索无果,对我来说没有意义,因为从我所看到的一切来看,我是调用函数。
我觉得这与 R 如何处理函数内部的数据帧有关,所以我也尝试使用 {{column}}
和 {{col_name}}
代替 enquo()
/ !!column
调用,但这没有用。
公平警告,我是一个 Python 人,所以我的方法可能不是标准的 R 票价。如果我的方法不正确,请随时指出。
你的代码基本正确;取消注释第二行 col_name <- 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')