Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在rasternames中插入空格?R_R_Random Forest_Raster_R Raster_Names - Fatal编程技术网

如何在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我把它标记为答案,因为它解决了问题,但没有解决问题。由于在以下步骤中,名称再次包含一个点而不是一个空格,因此我无法预测堆栈。我将其标记为答案,因为它解决了问题,但没有解决问题。由于在以下步骤中,名称再次包含一个点而不是一个空格,因此我无法预测堆栈。