首页 > 解决方案 > 尝试写入或绘制栅格时 .local(object, ...) 中的错误

问题描述

我有一个 randomForest 模型,我试图在研究区域进行预测。我能够毫无错误地运行预测,并且我可以看到它产生了一个栅格,但是当我尝试运行writeRaster()or时plot(),我得到了错误Error in .local(.object, ...)而没有任何更多信息。这是代码(注意 envStack 是环境预测器的栅格堆栈,rf.full 是 randomForest 模型对象):

library(here)
library(raster)
library(randomForest)
setwd(here("species", model_species, "outputs", "grids"))
fn <- paste0(model_run_name, "_raw_", Sys.Date(), ".tif")

outRas <- predict(object = envStack,
                  model = rf.full,
                  type = "prob",
                  index = 2, 
                  na.rm = TRUE,
                  filename = fn,
                  format = "GTiff",
                  overwrite = TRUE,
                  progress = "text")
writeRaster(outRas, filename = fn, format = "GTiff", overwrite = TRUE)

而且,这是错误:

.local(.Object, ...) 中的错误:

如果我尝试绘制输出栅格,也会发生同样的事情:

plot(outRas)

.local(.Object, ...) 中的错误:

我包括了 envStack 和 rf.full 对象的屏幕截图,以及预测中的 outRas 栅格产品。为了检查问题是否是文件大小问题,我使用了object.size(outRas),它返回了12832 bytes. 我还检查了要存储光栅的驱动器上的可用空间,并且有超过 60 GB 的可用空间: 栅格堆栈、射频模型和输出预测栅格对象的屏幕截图

我不确定为什么堆栈中的许多栅格的最小值和最大值是未知的,但为了确保各个栅格没有损坏,我尝试绘制一个缺少最小值/最大值(plot(envStack[[1]]))的栅格,它绘制得很好: envStack 中的第一个栅格图

模型对象 ( rf.full) 已成功用于计算各种验证指标,据我所知,它没有问题,并且我要保存输出栅格的文件夹存在。

在此处输入图像描述

当我使用 检查临时文件位置时rasterTmpFile(),它返回一个不存在的文件(尽管包含文件夹存在):

rasterTmpFile()
[1] "C:/Users/username/AppData/Local/Temp/Rtmpkxfn1t/raster/r_tmp_2020-02-17_152958_23480_67648.grd"

空临时文件夹

我觉得我以前遇到过这个问题,但我不记得我是如何解决它的(或者我是否解决了它)。我在这里看到的相关问题指向文件大小和文件位置问题,这似乎不是我的问题。一些提示格式类型的问题,但我最近在上周使用writeRaster()with在此过程的早期步骤中将其他栅格保存为 GeoTiffs format = "GTiff"。此外,当我尝试outRas在 R 中绘图时遇到同样的错误,这使得光栅本身似乎存在问题。任何帮助表示赞赏。

更新:问题原来是该writeRaster()语句是不必要的。把它拿出来解决了这个问题。有关更多详细信息,请参阅下面的答案。

标签: rr-raster

解决方案


我弄清楚我做错了什么。我将该代码位嵌入到 if/else try 语句中,因此它试图运行预测并将光栅写入同一运行的一部分。但是,该writeRaster()行是不必要的,因为该predict()函数包含一个filename=用于保存文件的参数。通过告诉它在以某种方式混淆 R 并导致它抛出该错误之后立即写入光栅。因此,我删除了该writeRaster()声明,它解决了问题。


推荐阅读