2014-10-03 2 views
1

У меня есть кадр данных с ежедневными наблюдениями, которые я хотел бы интерполировать. Я использую automap для создания вариограммы на каждый день, а затем применительно к новым данным. Я пытаюсь запустить цикл и поместить результаты в новый dataframe. К сожалению, кадр данных с результатами содержит только последний предсказанный день.R autoKrige loop (пакет automap)

coordinates(mydata) <- ~lat+long 
coordinates(new_data) <- ~lat+long 
df <- data.frame(matrix(nrow=50,ncol=10)) #new data frame for predicted valeus 

for(i in 1:ncol(mydata)) 
    kriging_new <- autoKrige(mydata[,i],mydata,newdata) 
    pred <- kriging_new$krige_output$var1.pred 
    df[,i] <- data.frame(pred) 

Результат выглядит так, все столбцы должны быть заполнены значениями, а не только последний:

X1 X2 X3 X4 X5 X6 X7 X8 X9  X10 
1 NA NA NA NA NA NA NA NA NA 12.008726 
2 NA NA NA NA NA NA NA NA NA 6.960499 
3 NA NA NA NA NA NA NA NA NA 10.894787 
4 NA NA NA NA NA NA NA NA NA 14.378945 
5 NA NA NA NA NA NA NA NA NA 17.719522 

Я также получить предупреждение, говоря:

Warning message: 
In autofitVariogram(formula, data_variogram, model = model, kappa = kappa, : 
    Some models where removed for being either NULL or having a negative sill/range/nugget, 
    set verbose == TRUE for more information 

Если я автоматически создаю autoKrige для каждой строки, все работает нормально. Кажется, что цикл работает не так, как обычно. Это какая-то проблема в пакете automap?

Большое спасибо!

ответ

2

Я думаю, вы просто забыли приложить код в своей петле for в фигурных скобках. В результате вы выполняете петлю, в 10 раз, перезапись kriging_new с собой каждый раз, когда:

for(i in 1:ncol(mydata)) 
    kriging_new <- autoKrige(mydata[,i],mydata,newdata) 

Только тогда вы назначаете результат от вашей последней итерации:

pred <- kriging_new$krige_output$var1.pred 

и, наконец, назначить тех, последний столбец вашего фрейма данных, содержащий ваши прогнозы (счетчик i10 контура по-прежнему установлен на 10 в этой точке):

df[, i] <- data.frame(pred) 

Всегда пишите петли с несколькими строками таких утверждений:

for (condition) { 
    statement1 
    statement2 
    ... 
} 
+0

Право! Большое спасибо! Пытался понять это слишком долго, должно быть, были полностью скобки слепы :-) Он работает сейчас! – Tom

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