根据data.frame中的regex标准在列表的多个元素上运行单独的函数

时间:2016-04-25 21:33:27

标签: regex r grep

以下是有效的,但我缺少函数式编程技术,索引或更好的结构化数据方法。一个月之后,需要一点时间来记住它是如何工作的,而不是易于维护。它不应该是一种解决方法。我想使用正则表达式来决定使用哪个函数用于预期的文件组。当出现新的文件格式时,我可以编写读取函数,然后将函数和正则表达式一起添加到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]
}

0 个答案:

没有答案