r - 尝试写入或绘制光栅时 .local(object, ...) 出错

我有一个 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/

相关文章:

java - 如何将不同大小的元素立即放在彼此之上?

node.js - 谷歌 API + Passport + react : Authenticati

javascript - Vue.js 清除用户缓存

css - 使用 attr() 更新 CSS 变量

php - 无服务器框架,处理程序不存在

azure-devops - 在 Azure Devops 中编写 EF6 迁移脚本

python - 如何在 TensorFlow 2 中保存/加载模型的一部分?

ruby - RSpec Mock - 类未实现实例方法 : jql. 也许您打算改用 `class

css - 如何在不破坏所有内容的情况下 stub Sprockets 4 中的 Assets ?

pytorch - 在 Pytorch tensorboard 中绘制几张图