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