我正尝试使用R代码将大量光栅图块组合为单个镶嵌图,如下所示。出现的错误是:
if(xn == xx){:需要TRUE / FALSE时缺少值
该错误出现在for循环之后。
非常感谢您的建议。
require(raster)
rasters1 <- list.files("D:/lidar_grid_metrics/ElevMax",
pattern="*.asc$", full.names=TRUE, recursive=TRUE)
rast.list <- list()
for(i in 1:length(rasters1)) { rast.list[i] <- raster(rasters1[i]) }
rast.list$fun <- mean
rast.mosaic <- do.call(mosaic,rast.list)
plot(rast.mosaic)
答案 0 :(得分:0)
首先写一个更好的方法(使用lapply)
library(raster)
ff <- list.files("D:/lidar_grid_metrics/ElevMax",
pattern="\\.asc$", full.names=TRUE, recursive=TRUE)
rast.list <- lapply(ff, raster)
rast.list$fun <- mean
rast.mosaic <- do.call(mosaic,rast.list)
现在,出错了。发生错误后显示traceback()
的结果很有用。但是从收到的错误消息中,我推断出一个RasterLayers的扩展区的值为NA
。这使其无效。您可以通过
t(sapply(rast.list, function(i) as.vector(extent(i))))
EDIT
有了Ram给我的文件,我弄清楚了发生了什么。使用本地驱动程序从ascii文件创建RasterLayer时出现错误,如果该文件指定“ xllcenter”而不是“ xllcorner”。
此问题现已在github上可用的开发版本(2.9-1)中进行了修复。
通过安装rgdal
也可以避免该问题,因为如果rgdal
可用,则将不使用本机驱动程序。