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 回答