R autoKrige循环(包自动化)

时间:2014-10-03 17:08:34

标签: r loops automap

我有一个包含每日观察的数据框,我想插入。我使用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,一切正常。似乎循环不像通常那样工作。这是自动化包中的一些问题吗?

非常感谢!

1 个答案:

答案 0 :(得分: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
    ...
}