尝试写入或绘制栅格时出现 .local(object, ...) 中的错误。

3

我有一个randomForest模型,想要在研究区域内进行预测。我能够成功运行预测,看到它产生了一张栅格图,但是当我尝试运行writeRaster()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)

以下是错误信息:

Error in .local(.Object, ...) :

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

plot(outRas)

Error in .local(.Object, ...) :

在预测过程中,我包含了envStack和rf.full对象的环境堆栈和输出预测光栅产品屏幕截图。为了检查问题是否是文件大小问题,我使用了object.size(outRas),返回12832字节。我还检查了我要存储栅格的驱动器上可用的空间,有超过60GB的可用空间:raster stack、rf模型和输出预测栅格对象的屏幕截图
我不确定为什么堆栈中很多栅格的最小值和最大值都未知,但只是为了确保单个栅格没有损坏,我尝试绘制了一个带有缺失最小/最大值的栅格(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()format =“GTiff”将其他栅格保存为GeoTiff。此外,仅尝试在R中绘制outRas时出现相同的错误,使它看起来像栅格本身存在问题。非常感谢任何帮助。

更新:问题实际上是writeRaster()语句是不必要的。将其删除解决了问题。请查看下面我的答案以获取更多详细信息。

1个回答

0

我弄明白了我的错误。我将那段代码嵌入到了一个if/else try语句中,因此它试图在同一次运行中运行predict并写入raster。然而,writeRaster()这一行是不必要的,因为predict()函数包括一个filename=参数来保存文件。在告诉它在这之后立即写入raster就会让R感到困惑,并导致它抛出错误。因此,我删除了writeRaster()语句,问题得到解决。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接