试图弄清楚为什么,当我在读取NDVI栅格时,@ data @ values插槽不包含实际值,除非手动设置它们。例如:
NDVI <- raster("./filename.tif", crs="+proj=longlat +datum=WGS84")
NDVI@data@values
## returns: logical(0)
使用相同方法加载的其他栅格并没有发生这种情况,因此感到困惑。我希望我可以更具体一些,但我不记得之前做过任何不同的事情。使用以下命令手动获取值很容易:
NDVI1@data@values <- getValues(NDVI19east)
但是,对于每个文件都必须这样做。因此,分为两部分:
为什么首先发生这种情况?我知道这可能与栅格文件的存储方式有关(即是否存储在内存中),但是我真的不明白这将如何改变我应该使用的访问数据的方法...
是否有一种方法可以自动执行此过程(也许使用类似于lapply的方法)以将文件读取为RasterLayers并访问这些文件的值?我目前的项目涉及一次读取6-10个文件以获取NDVI,降雨和其他环境变量,以将它们组合并执行一些加权叠加。自动化导入数据的过程将很有帮助。
6
除非正在开发内部代码,否则不要使用@-使用readAll(NDVI)。它作为一种内存效率技术发生,您可以打开一个非常大的网格,这是一个承诺-光栅承诺在您实际需要数字时(通过rgdal,在这种情况下,通过GDAL)拉入数据。如果需要将对象另存为独立的R对象而不与文件绑定,则readAll是这样做的方法。请参阅?raster“在许多情况下
—
……
logical(0)
实际上,这是从文件创建的任何 Raster *对象的值。就像@mdsumner所说的那样,无论哪种方式都不要直接读取这些值,当然也不要设置它们!(尽管您NDVI1@data@values <- getValues(NDVI19east)
不会影响任何值,但这些值将被忽略)。可能是在脚本的更深处,您不了解如何有效使用这些对象。您可以使用getValues,但即使那样也很少需要。提供一个简单,独立的示例,说明您要实现的目标。
非常感谢。正如mdsumner所说,我最终用readAll()完成了所需的工作,因此,谢谢您-这是一个很好的建议!我最近刚接触光栅包,所以老实说我还不知道该功能以及使用它访问大型文件实际值的需要。
—
亨利·霍金斯·韦尔斯2015年