首页 > 解决方案 > 创建一个即使某些文件没有正确导入也能运行的函数

问题描述

我有一个导入多个文件的功能。如下图所示:

 tucson_function<- function (x) {
   df <- read.tucson(x)
   final1<-as.data.frame(df)
   final2<-rownames_to_column(final1, 'year')
   site_ID <- sub('\\.rwl$', '', x)
   final2<- cbind(final2, site_ID)
   final3<-reshape2::melt(final2)
    }

read.tucson来自一个包dplR,用于导入 .rwl 扩展名的文件。然后我通过以下方式导入文件:

asia_data<-lapply(asia, tucson_function)

问题是tucson_function文件夹中的多个文件失败。这很好,但在当前形式下,它会阻止其余文件上传(它会引发警告并停止函数)。我希望该功能“忽略”警告并丢弃失败的文件,并继续导入其余文件。

我怎么能这样做?

标签: r

解决方案


我们可以使用possiblyfrompurrrtryCatchfrom base R。使用,指定在失败possibly时返回的值otherwise

library(purrr)
ptucson_function <- possibly(tucson_function, otherwise = NA)
map(asia, ptucson_function)

base R,我们可以使用tryCatch

lapply(asia, function(x) tryCatch(tucson_function(x), error=function(e)  NA))

推荐阅读