2013-09-05 2 views
1

Я новичок в R (и программировании), и мне нужно сделать простой экспоненциальный прогноз сглаживания для 216 разных продуктов.Прогноз нескольких столбцов с петлей

пример:

items <- dataset 

Date  A  B  C 
01-10 3  1  7 
02-10 4  2  0 
03-10 9  2  1 
04-10 8  1  3 

я получил:

for(i in 1:ncol(items)) { 
    col <- ts(items[,i]) 
    fcast <- ses(col, h=12) 
    write.table(fcast, file ="test.csv",sep=";", dec=",") 
} 

Error: not compatible with REALSXP 

ли я делаю все неправильно, или я на правильном пути ... Пожалуйста, помогите мне

+0

Ваш пример не кажется, производят ошибку вы упоминаете. Было бы полезно, если вы предоставите вывод 'traceback()'; это помогает найти актуальную проблему. Кстати, вы также прогнозируете первый столбец (дата) - это имеет смысл? Также сообщение об ошибке msg предполагает, что вы пытаетесь использовать данные, которые не являются числом, где ожидается число. Может быть, вы примените ses() или ts() к столбцу символов? – f3lix

+0

> traceback() 6: stop (список = "несовместим с REALSXP", вызов = NULL, cppstack = NULL)) 5: etsTargetFunctionInit (par = par, y = y, nstate = nstate, errortype = errortype, trendtype = trendtype, seasontype = seasontype, damped = damped, par.noopt = par.noopt, lowerb = lower, upperb = upper, opt.crit = opt.crit, nmse = nmse, bounds = bounds, m = m, pnames = names (par), pnames2 = names (par.noopt)) 4: etsmodel (y, errortype [i], trendtype [j], seasontype [k], damped [l], alpha, бета, гамма, фи, нижняя = нижняя, верхняя = верхняя, – user2749772

+0

opt.crit = opt.crit, nmse = nmse, bounds = bounds, ...) 3: ets (x, "ANN", alpha = alpha, opt.crit = "mse") 2: прогноз (ets (x, "ANN", alpha = alpha, opt.crit = "mse"), h , уровень = уровень, вентилятор = вентилятор, ...) 1: ses (col, h = 12) при # 3 – user2749772

ответ

0

Это должно работать? :

# library("forecast") 
for(i in 1:ncol(items)) { 
    col <- ts(items[,i]) 
    fcast <- ses(col, h=12) 
    write.table(fcast, file =paste("test", i, ".csv", sep="") ,sep=";", dec=",") 
} 

Althogh I не получило никакой ошибки с вашим кодом.

Для моего примера item является data.frame взгляд на dput выход:

structure(list(Date = structure(1:4, .Label = c("01-10", "02-10", 
"03-10", "04-10"), class = "factor"), A = c(3L, 4L, 9L, 8L), 
    B = c(1L, 2L, 2L, 1L), C = c(7L, 0L, 1L, 3L)), .Names = c("Date", 
"A", "B", "C"), class = "data.frame", row.names = c(NA, -4L)) 

, где первый столбец factor и другие integer

+0

Я все еще получаю ту же ошибку. – user2749772

+0

Может быть, данные читаются как матрица символов 45x216? – user2749772

+0

хорошо, я думаю, что вижу, что вы делаете, но у меня 216 строк. так как я могу сделать первый ряд, а остальные строки целыми? или мне нужно вручную обратиться ко всем из них? – user2749772

Смежные вопросы