2015-02-09 29 views
2

我跟多个时间序列模型的工作,并希望能与data.table对它们进行管理:更新的型号列表数据的列表中data.table

pkg <- c("data.table", "magrittr", "forecast") 
sapply(pkg, library, character.only = TRUE) 

df <- data.frame(
    group = rep(c("a", "b", "c"), each = 10), 
    val = sample(1:10, 30, replace = TRUE) 
) %>% as.data.table 

我可以成功地生成模型(和准备下一个步骤的时间序列):

t1 <- df[, list(
    tsAll = list(val %>% as.ts), 
    mod1 = list(val %>% as.ts %>% window(1, 7) %>% ets) 
), by = group] 

我现在试图更新ETS模式,它包括使“tsAll”到ETS的功能,并提供模型中使用(MOD1)。

这不起作用:

t1[, lapply(tsAll, ets, model = mod1)] 

我也试过:

t1[, lapply(tsAll, ets, model = mod1[[1]])] 

这将运行,但它看起来像同型号返回到每一行。

也许我已经解决了这个问题,但遇到这样的问题:

Why is using update on a lm inside a grouped data.table losing its model data?

任何人都可以进行下一步帮助吗?

回答

1

这是你想要的东西:

t1[, list(lapply(tsAll, ets, model = mod1[[1]])), by = group]$V1 

我把结果列表中,这样的数据类型被保留,而不是被转换为载体,通过组所做的操作(因为每个小组有自己的模型)。

+0

就是这样 - 当你看到它时很简单 - 谢谢。在第一个模型返回到所有行的时候,我得到了间歇性错误。如果我能确定究竟是什么造成的,我会更新这个问题。 – 2015-02-12 12:56:18