如何在rasternames中插入空格?R
我尝试在光栅堆栈的层名称中添加一个空格如何在rasternames中插入空格?R,r,random-forest,raster,r-raster,names,R,Random Forest,Raster,R Raster,Names,我尝试在光栅堆栈的层名称中添加一个空格 names(predstack)[[1]] <- "MSR670 max" > names(predstack)[[1]] [1] "MSR670.max" 名称(predstack)[[1]]名称(predstack)[[1]] [1] “MSR670.max” 我知道这很愚蠢,但我计算了一个模型,这个模型花了7天的时间进行计算。不幸的是,模型变量的一个名称中包含一个空格。 现在我希望在堆栈上使用p
names(predstack)[[1]] <- "MSR670 max"
> names(predstack)[[1]]
[1] "MSR670.max"
名称(predstack)[[1]]名称(predstack)[[1]]
[1] “MSR670.max”
我知道这很愚蠢,但我计算了一个模型,这个模型花了7天的时间进行计算。不幸的是,模型变量的一个名称中包含一个空格。
现在我希望在堆栈上使用predict,但它不起作用,因为出现以下错误:
> 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"
>Prediction2model名称(预堆栈)
[1] “MSR670.max”GLI201809_的意思是
[3] “MSR670201809标准”“MVI201805最大”
>var2model$selectedvars
[1] “MSR670最大值”GLI201809_表示
[3] “MSR670201809标准”“MVI201805最大”
所以我的问题是:如何才能在光栅图层名称中添加空格字符?
或者以后是否可以更改随机林模型中的变量名
谢谢你的建议 为什么
names(predstack)[[1]]为什么names(predstack)[[1]]]如果有人有同样的问题,下面是当模型变量名中有空格时问题的解决方案
无法更改模型中的名称。正如上面@Eike所示,光栅图层名称可以更改,但光栅::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
name如果有人有相同的问题,下面是当模型变量名中有空格时问题的解决方案
无法更改模型中的名称。正如上面@Eike所示,光栅图层名称可以更改,但光栅::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
name我把它标记为答案,因为它解决了问题,但没有解决问题。由于在以下步骤中,名称再次包含一个点而不是一个空格,因此我无法预测堆栈。我将其标记为答案,因为它解决了问题,但没有解决问题。由于在以下步骤中,名称再次包含一个点而不是一个空格,因此我无法预测堆栈。