以下是有效的,但我缺少函数式编程技术,索引或更好的结构化数据方法。一个月之后,需要一点时间来记住它是如何工作的,而不是易于维护。它不应该是一种解决方法。我想使用正则表达式来决定使用哪个函数用于预期的文件组。当出现新的文件格式时,我可以编写读取函数,然后将函数和正则表达式一起添加到data.frame中,以便与其他所有格式一起运行。
我有不同格式的Excel和csv文件需要读入和标准化。我想维护文件名正则表达式的列表或data.frame以及要使用的适当函数。有时会出现无法匹配的新文件格式,以及没有新文件的旧格式。但随后它变得复杂,这是我宁愿避免的。
# files to read in based on filename
fileexamples <- data.frame(
filename = c('notanyregex.xlsx','regex1today.xlsx','regex2today.xlsx','nomatch.xlsx','regex1yesterday.xlsx','regex2yesterday.xlsx','regex3yesterday.xlsx'),
readfunctionname = NA
)
# regex and corresponding read function
filesourcelist <- read.table(header = T,stringsAsFactors = F,text = "
greptext readfunction
'.*regex1.*' 'readsheettype1'
'.*nonematchthis.*' 'readsheetwrench'
'.*regex2.*' 'readsheettype2'
'.*regex3.*' 'readsheettype3'
")
# list of grepped files
fileindex <- lapply(filesourcelist$greptext,function(greptext,files){
grepmatches <- grep(pattern = greptext,x = data.frame(files)[,1],ignore.case = T)
},files = fileexamples$filename)
# run function on files based on fileindex from grep
for(i in 1:length(fileindex)){
fileexamples[fileindex[[i]],'readfunctionname'] <- filesourcelist$readfunction[i]
}