2014-10-03 37 views
1

我有一個數據框,包含每日觀察數據,我想插入數據框。我使用automap爲每一天建立一個variogram,然後應用於新的數據。我嘗試運行一個循環並將結果放入一個新的數據框中。不幸的是,包含結果的數據框只包含最後一個預測日期。R autoKrige循環(程序包自動映射)

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 

最後分配那些數據幀的最後一列保存您的預測(循環計數器i在此處仍設置爲10):

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

總是用這樣的多行語句編寫循環:

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

對!非常感謝!試圖弄清楚這一點太長了,一定是完全括號盲目:-)它現在的作品! – Tom 2014-10-05 22:42:35