我在不同位置的文件名中都有匹配的字符串,我需要对其进行匹配。 这是文件的样子,
na_files
/Users/AS/SAB-M-13.M4DF-2.T-bR.r1-v1_0-ADDFF.0087.cou
/Users/AS/SAB-M-32.MSFG-2.T-bR.r1-v1_0-ADDFF.3989.cou
/Users/AS/SAB-M-3.PZT-MOHUA-3.T-bR.r1-v1_0-ADDFF.6188.cou
以及其他目录中的以下文件列表
lb_files
/Users/DS/SAB-M-13.M4DF-2.T-bR.r1-v1_0-ADDFF.0087.AD.lib
/Users/DS/SAB-M-32.MSFG-2.T-bR.r1-v1_0-ADDFF.3989.AD.lib
/Users/DS/SAB-M-3.PZT-MOHUA-3.T-bR.r1-v1_0-ADDFF.6188.AD.lib
我需要匹配两个列表中的na_files
和lb_files
才能继续。
所以我尝试使用
na_files = grep("cou", list.files(DIR, recursive=T, full.names=T), value=T)
lb_files = grep("lib", list.files(DIR, recursive=T, full.names=T), value=T)
all_patients = NA
for(curr_file_idx in 1:length(pa_files)){
curr_file = pat_files[curr_file_idx]
libsize_file = libsize_files[curr_file_idx]
curr_pa = data.frame(fread(curr_file))
pa_id = strsplit(curr_file, "[.][P][Z][T][-]")[[1]][[2]]
pa_id = substr(patient_id, 1, 5)
libsize = data.frame(fread(libsize_file))
pa_id2 = strsplit(libsize_file, "[.][P][Z][T][-]")[[1]][[2]]
pa_id2 = substr(pa_id2, 1, 5)
if(patient_id != pa_id2){
print(pa_id)
print(pa_id2)
print("WRONG LB")
return(1)
}
但是此子字符串模式仅搜索一个文件,而其余文件则抛出错误。
Error in strsplit(curr_file, "[.][P][Z][T][-]")[[1]][[2]] :
subscript out of bounds
我需要适用于所有文件的任何正则表达式或模式。在三个文件中,.M4DF
,.MSFG
,.MOHUA
应该匹配之后,这正是这个部分。
答案 0 :(得分:0)
根据您的数据,提取na_files
和lb_files
的文件名
na_files<-c("SAB-M-13.M4DF-2.T-bR.r1-v1_0-ADDFF.0087.cou","SAB-M-32.MSFG-2.T-bR.r1-v1_0-ADDFF.3989.cou","SAB-M-3.PZT-MOHUA-3.T-bR.r1-v1_0-ADDFF.6188.cou")
lb_files<-c("SAB-M-13.M4DF-2.T-bR.r1-v1_0-ADDFF.0087.AD.lib","SAB-M-32.MSFG-2.T-bR.r1-v1_0-ADDFF.3989.AD.lib","SAB-M-3.PZT-MOHUA-3.T-bR.r1-v1_0-ADDFF.6188.AD.lib")
na_files_name<-stringi::stri_extract(na_files,regex = "[^.]+") #extracts file name up to first .
lb_files_name<-stringi::stri_extract(lb_files,regex = "[^.]+")
na_files_name %in% lb_files_name #checks the file names match