【问题标题】:R autoKrige loop (package automap)R autoKrige 循环(包自动映射)
【发布时间】:2014-11-28 18:46:36
【问题描述】:

我有一个包含每日观察的数据框,我想对其进行插值。我使用 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 包中的问题吗?

非常感谢!

【问题讨论】:

    标签: r loops automap


    【解决方案1】:

    我认为您只是忘记将 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
        ...
    }
    

    【讨论】:

    • 对!非常感谢!试图解决这个问题太久了,一定是完全瞎了括号:-)现在可以了!
    猜你喜欢
    • 2021-02-28
    • 2012-03-31
    • 2017-09-06
    • 1970-01-01
    • 1970-01-01
    • 2021-07-28
    • 2015-08-24
    • 2015-04-12
    • 1970-01-01
    相关资源
    最近更新 更多