if(xn == xx){:需要TRUE / FALSE时缺少值

时间:2019-01-25 22:35:38

标签: r

我正尝试使用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)

1 个答案:

答案 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可用,则将不使用本机驱动程序。