Microsoft R-整理:如果数据文件加载失败,请在其位置创建一个空的tibble/表



我真的不知道如何简洁地表达这一点。。我的问题是:是否可以添加一个错误处理功能,以便在数据文件(如csv(无法加载为表/tibble时,创建一个空白版本?

我的意思是:

我的正常csv加载如下:

Monday2 <- paste0(my_file_location/my_file_name",Monday,".csv")
leads1 <- tibble(read.csv(Monday2))
Tuesday2 <- paste0("my_file_location/My_file_name",Tuesday,".csv")
leads2 <- tibble(read.csv(Tuesday2))
Wednesday2 <- paste0("my_file_location/my_file_name",Wednesday,".csv")
leads3 <- tibble(read.csv(Wednesday2))

如果由于某种原因,我的csv无法加载(例如,文件不存在,或者我输入的名称不正确(,可以创建它的空白版本吗?

我对空白tibble的想法是这样的:

Leads21 <- tibble("Column1"= "", "Column2"= "", "Column3"= "")
Leads22 <- tibble("Column1"= "", "Column2"= "", "Column3"= "")
Leads23 <- tibble("Column1"= "", "Column2"= "", "Column3"= "")

此空白tibble与正确加载的文件的列完全相同。我每周五都会自动装订5个文件。。如果文件加载失败,我可以在进程的下游捕获它(其中一列是文件名/日期(,但我不希望整个进程失败。

典型的"加载失败"错误如下所示:

In file(file, "rt") : cannot open file 'my_file_location/My_file_name_2022-03-27.csv': No such 
file or directory

然后,所有5个文件的绑定失败,并显示错误消息,如:

### Join full weeks worth of leads into 1 file
Leads <- bind_rows(leads1,leads2,leads3, leads4, leads5) 
Error in list2(...) : object 'leads1' not found

这会导致我的其余代码失败/操作不正确。如果我能绑定一个空的tibble,我的代码就可以完成运行,并且我可以在最后检查丢失的文件。最终,如果文件丢失,它不如处理现有文件重要(因此停止我的代码来定位/修复失败的加载并不重要(

我的背景是微软访问VBA,我一直在努力写一些东西,比如:

If tibble Leads1 exists, use it.. If tibble Leads1 does not exist use Leads21

不知道如何在R中做到这一点。我一直在尝试阅读/理解try((包装器,但我不明白如何在我的情况下使用它。

以下是我如何解决这个问题的。不确定它是最优雅的,但它能胜任工作。

我首先创建空白tibble。我为正在加载的每个文件创建一个空白tibble(这种方法的可伸缩性很差(;然后我读取了每个.csv文件。如果.csv文件无法加载,那么我的空白tibble将不会被替换,并且将可用于最后的绑定。

leads1 <- tibble("Column_1" = "", "Column_2" = "")
leads1$filename <- Monday

Monday2 <- paste0("my_file_location/File_name_part1",Monday,".csv")
leads1 <- tibble(read.csv(Monday2, colClasses = 'character'))
leads1$filename <- Monday
Leads <- bind_rows(leads1,leads2,leads3, leads4, leads5) %>% distinct(Column1, .keep_all = TRUE)

最新更新