2015-02-09 70 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