簡體   English   中英

跳過lapply中的錯誤並繼續處理R中的ncdf4文件

[英]Skip error in lapply and continue processing ncdf4 files in R

我使用“ sub”腳本在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的示例。 請注意,我大大簡化了您的功能。 我不確定這一點,因為我沒有您的數據,但是在大多數情況下,這種更為直接的方法仍然有效。 您當然不需要創建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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM