我的文件夹中有以下文件:
Sim_zone_1_TEMP_cell_1_5.ffData
Sim_zone_1_TEMP_cell_1_5.RData
Sim_zone_338_TEMP_cell_338.ffData
Sim_zone_338_TEMP_cell_338.RData
我还有以下细胞载体:
cell <- c(1,5,338)
我想打开我的单元格数与名称匹配的文件。例如,对于我想要的单元格1和5:
ffload("Sim_zone_1_TEMP_cell_1_5")
对于细胞338:
ffload("Sim_zone_338_TEMP_cell_338")
我尝试使用以下代码:
for (i in 1:length(cell) {
list.files(path = results_wd,
pattern=paste("TEMP_cell_",cell[i],"_",sep=""))
}
它适用于单元号1但不适用于数字5(因为我有cell_1_5而不是cell_5)。我不能只使用&#34; pattern = paste(&#34; _&#34;,cell [i],&#34; _&#34;,sep =&#34;&#34 ;)&#34;因为在&#34; zone&#34;之后我可以有相同的数字。例如,它是TEMP,但它可以是其他东西。
实际上我想要两件事:
有人可以帮助我吗?
答案 0 :(得分:2)
我首先获取文件名(这里我只是将它们写入矢量,但你可以使用list.files),然后我使用gsub()
去掉扩展名,然后循环遍历cell
并且使用grep()
相应匹配匹配文件名。
我在f.names
(测试文件名)中添加了一些额外的元素,以确保在我认为您可能遇到的某些情况下匹配不会失败(例如,338不匹配) cell_3381)。
匹配的基本逻辑是在文件名中找到cell[i]
中的数字。 cell[i]
中的数字被定义为文件名中的数字字符(例如338)的匹配序列,1)(不是立即)前面有“cell”,2)立即前面有一个“_”,3)不是后跟任何数字
f.names <- c("Sim_zone_1_TEMP_cell_1_5.ffData", "Sim_zone_1_TEMP_cell_1_5.RData", "Sim_zone_338_TEMP_cell_338.ffData", "Sim_zone_338_TEMP_cell_338.RData", "Sim_zone_1_TEMP_5_cell_1.RData", "Sim_zone_338_TEMP_cell_338_1.RData", "Sim_zone_338_TEMP_cell_3381.RData", "Sim_zone_338_TEMP_cell_1338.RData", "Sim_zone_338_TEMP_cell_133811.RData") # example file names
# f.names <- list.files(path=results_wd) # to define f.names based on directory contents, use this line instead
f.names.noExt <- gsub("\\.(?:ff|R)Data$", "", f.names, perl=TRUE) # remove extension from file names
cell <- c(1,5,338) # "cell" values through which to cycle
stored.matches <- list() # this will store matching file names (sans extension), each element of the list will contain a vector of names
for(i in 1:length(cell)){
t.cell <- cell[i] # temporary cell value
t.pattern <- paste("(?<=cell).*_", t.cell, "(?![0-9])", sep="") # temporary pattern based on t.cell
t.matches <- grep(t.pattern, f.names.noExt, perl=TRUE, value=TRUE) # temporary matches
stored.matches[[as.character(t.cell)]] <- t.matches # store the matched names in a list
}
print(stored.matches)