如何解决如何在栅格名称中插入空格? R
names(predstack)[[1]] <- "MSR670 max"
> names(predstack)[[1]]
[1] "MSR670.max"
我知道这很愚蠢,但我计算了一个需要 7 天计算的模型。不幸的是,模型变量的一个名称在名称中包含一个空格。 现在我想在堆栈上进行预测,但这是行不通的,因为出现以下错误:
> Prediction2model <- raster::predict(predstack,var2model)
Error in predict.randomForest(modelFit,newdata) :
variables in the training data missing in newdata
> names(predstack)
[1] "MSR670.max" "GLI201809_means"
[3] "MSR670201809_sd" "MVI201805_max"
> var2model$selectedvars
[1] "MSR670 max" "GLI201809_means"
[3] "MSR670201809_sd" "MVI201805_max"
所以我的问题是:如何向栅格图层名称添加空格字符? 或者之后是否可以更改随机森林模型中的变量名称?
感谢您的任何想法!
解决方法
names(predstack)[[1]] <- "MSR670 max"
未按预期工作的原因是 names()
函数在 raster
包中的实现方式。
Here 您可以看到在对类 names()
的对象调用 RasterStack
函数时应用的方法。在第 60 行,该方法调用了定义为 here 的 validNames()
函数。
validNames()
反过来依赖于一个名为 make.names()
的函数,该函数基本上确保字符串中没有空格和其他不需要的字符(例如您的光栅名称)。
因此,查看 the way,names
方法将名称分配给类 raster
或 rasterStack
的对象,提示我们可以如何规避该问题。
TLDR:
predstack[[1]]@data@names <- "MSR670 max"
应直接将名称分配给栅格,而不使用 names()
函数及其实现的方法。
由于它不打算以这种方式分配栅格名称,因此这种方法可能会出现问题,但在您的特定情况下可能就足够了。
,如果有人遇到同样的问题,这里是模型变量名称中有空格时的解决方案。
无法更改模型中的名称。正如上面@Eike 所示,栅格图层名称可以更改,但它们将通过 raster::predict() 函数以相同的方式再次更改。
唯一的解决方案是提取栅格,然后在数据帧上进行预测。然后,您可以将数据帧的值放入栅格中,并将堆栈的预测作为栅格。
这里是基于给定示例的解决方案
name <- names(predstack)
varname <- var2model$selectedvars
#initialize progressbar
pb = txtProgressBar(min = 0,max = length(predstack),initial = 0,style = 3)
#extracting rasterdata
for (i in 1:length(predstack)){
setTxtProgressBar(pb,i)
#extracting raster values
print(paste0("Starting extracting raster data: ",Sys.time()))
df <- as.data.frame(predstack[[i]])
colnames(df) <- name[[i]]
if(i == 1){
obs <- df
}
else{
print(paste0("Finished extracting raster data: ",Sys.time()))
obs <- cbind(obs,df)
}
}
colnames(obs)[[1]] <- varname[1]
pred_stack_df <- predict(var2model,obs)
predraster <- predstack[[1]]
values(predraster) <- pred_stack_df
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。