我有一个 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 对象的屏幕截图以及来自预测的 outRas 栅格产品。为了检查问题是否是文件大小问题,我使用了 object.size(outRas)
,它返回了 12832 字节
。我还检查了要存储光栅的驱动器上的可用空间,并且有超过 60 GB 的可用空间:
我不确定为什么堆栈中的许多栅格的最小值和最大值是未知的,但为了确保单个栅格没有损坏,我尝试绘制一个缺少最小值/最大值的栅格(plot(envStack[[1]])
),绘制得很好:
模型对象 (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"
将其他栅格保存为 GeoTiffs >。此外,当我试图在 R 中绘制 outRas
时,我得到了同样的错误,这使得光栅本身似乎存在问题。感谢您的帮助。
更新:问题原来是 writeRaster()
语句是不必要的。拿出来解决问题。有关详细信息,请参阅下面我的回答。
最佳答案
我发现我做错了什么。我将该代码位嵌入到 if/else try 语句中,因此它试图运行预测并将栅格写入作为同一运行的一部分。但是,writeRaster()
行是不必要的,因为 predict()
函数包含用于保存文件的 filename=
参数。通过告诉它在不知何故混淆 R 并导致它抛出该错误之后立即写入光栅。因此,我删除了 writeRaster()
语句,问题就解决了。
https://stackoverflow.com/questions/60270919/