【问题标题】:Skip error in lapply and continue processing ncdf4 files in R在 lapply 中跳过错误并继续在 R 中处理 ncdf4 文件
【发布时间】:2015-05-30 13:40:09
【问题描述】:

我使用“子”脚本在 LINUX HPC 上提交了一个 R 脚本。我在 R 中编写了一个函数来应用于列表。但是,一旦遇到错误文件,它就会停止运行。如何编写 R 函数以跳过错误并继续处理好的 netcdf 文件?脚本:

##list files in the SEVIRI data folder
LST1<-list.files(pattern="GT_SSD.*\\.nc",recursive=T, path="/data atsr/SEVIRI/2007")

##Function to create rasters
fun2<-function(x){
##Open the files  
y1<-nc_open(x)
##Get soil moisture variable
y2<-ncvar_get( y1,"LST")
y3<-t(y2)
R1<-raster(y3, xmn=-80,xmx=80,ymn=-42,ymx=80)
proj4string(R1)<-CRS("+proj=longlat +ellps=WGS84")
frm <- extent(c(-19, 19,2,29))
pfrm <- as(frm, 'SpatialPolygons')  
R3<-crop(R1,pfrm)}

当我应用函数时

LST2<-lapply(LST1,fun2)

错误信息是:

 Error in nc_open(x) : 
 Error in nc_open trying to open file GT_SEV_2P/GT_SSD- L2-SEVIR_LST_2-20110122_010000-LIPM-0.05X0.05-V1.0.nc

一旦发生这种情况,脚本就会停止运行。请问,我如何确保它继续在好的设备上运行?以上代码只是第一组代码。

【问题讨论】:

  • 查看?try,或在 StackExchange 上搜索...

标签: r lapply skip


【解决方案1】:

这是try 的示例。请注意,我大大简化了您的功能。我不能确定这一点,因为我没有你的数据,但这种更直接的方法在大多数情况下都有效。您当然不需要创建用于裁剪的 SpatialPolygons 对象。

fun2 <- function(x, ext) {
    R1 <- try(raster(x, var="LST"), silent=TRUE)
    if (class(R1) == 'try-error') {
        return(NA)
    }
    frm <- extent(c(-19, 19, 2, 29))
    crop(R1, frm)
}

x <- lapply(LST1, fun2)

【讨论】:

  • 谢谢,@RobertH。但是,如果一个文件损坏或损坏,我的主要挑战是让函数在下一个文件上运行。我已经尝试了“尝试”命令,但仍然出现错误“R_nc4_open 中的错误:NetCDF:HDF 错误”,它不会继续处理我列表中的任何其他文件。 “spatialPolygons”命令是为了确保在我概述的步骤之后与我需要使用的其他矢量文件保持一致。我希望这可以帮助我获得一些帮助。
  • 我添加了silent=TRUE 来抑制错误消息并移动括号来修复脚本。您可能在某些时候需要一个 SpatialPolygons 对象,但您应该始终尽可能简化您的问题...
猜你喜欢
  • 1970-01-01
  • 2019-09-05
  • 1970-01-01
  • 2017-08-03
  • 1970-01-01
  • 2011-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多