1

補間したい毎日の観測データフレームがあります。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 パッケージの問題ですか?

どうもありがとう!

4

1 に答える 1

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
    ...
}
于 2014-10-05T03:17:41.773 に答える