Пропустить ошибку в lapply и продолжить обработку файлов ncdf4 в R

Я отправил сценарий R на LINUX HPC, используя сценарий «sub». Я написал функцию в 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

Как только это произойдет, скрипт перестанет работать. Как я могу убедиться, что он продолжает работать на хороших, пожалуйста? Приведенные выше коды — это только первый набор кодов.


person Joke O.    schedule 30.05.2015    source источник
comment
см. ?try или найдите его на StackExchange...   -  person Ben Bolker    schedule 30.05.2015


Ответы (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)
person Robert Hijmans    schedule 30.05.2015
comment
спасибо, @RobertH. Однако моя главная проблема заключается в том, чтобы запустить функцию для следующего файла, если один файл поврежден или неисправен. Я попробовал команду try, но все еще имею ошибку Error in R_nc4_open: NetCDF: ошибка HDF, и она не обрабатывает любые другие файлы в моем списке. команда spacePolygons предназначена для обеспечения единообразия с другими векторными файлами, с которыми мне нужно работать после шагов, о которых я рассказал. Я надеюсь, что это поможет мне получить некоторую помощь. - person Joke O.; 31.05.2015
comment
Я добавил silent=TRUE, чтобы скрыть сообщение об ошибке, и переместил скобки, чтобы исправить сценарий. Вполне может быть, что в какой-то момент вам понадобится объект SpatialPolygons, но вы всегда должны максимально упростить свой вопрос... - person Robert Hijmans; 31.05.2015