在做单细胞分析时,经常需要批量读入样品.gz结尾的文件。以GSE160512数据集为例,文件列表如下图:
文件名里面有_、.txt.gz这些东西。先批量读入文件名字。
rm(list=ls())
library(data.table)
dir='GSE160512_RAW/'
samples=list.files(dir)
samples
# [1] "GSM4874347_SAM24356161.txt.gz" "GSM4874348_SAM24356162.txt.gz" "GSM4874349_SAM24359109.txt.gz"
# [4] "GSM4874350_SAM24359110.txt.gz" "GSM4874351_SAM24359430.txt.gz" "GSM4874352_SAM24359431.txt.gz"
# [7] "GSM4874353_SAM24360950.txt.gz" "GSM4874354_SAM24360951.txt.gz" "GSM4874355_SAM24361188.txt.gz"
# [10] "GSM4874356_SAM24361189.txt.gz" "GSM4874357_SAM24364373.txt.gz" "GSM4874358_SAM24364374.txt.gz"
然后就是对samples变量进行操作了。
samples=gsub('.txt.gz','',samples)
samples
#[1] "GSM4874347_SAM24356161" "GSM4874348_SAM24356162" "GSM4874349_SAM24359109" "GSM4874350_SAM24359110"
# [5] "GSM4874351_SAM24359430" "GSM4874352_SAM24359431" "GSM4874353_SAM24360950" "GSM4874354_SAM24360951"
# [9] "GSM4874355_SAM24361188" "GSM4874356_SAM24361189" "GSM4874357_SAM24364373" "GSM4874358_SAM24364374"
## 这里将.txt.gz替换成空。
接下来进一步去掉_以及后面内容。
samples=gsub('_SAM.*','',samples)
samples
#[1] "GSM4874347" "GSM4874348" "GSM4874349" "GSM4874350" "GSM4874351" "GSM4874352" "GSM4874353" "GSM4874354"
#[9] "GSM4874355" "GSM4874356" "GSM4874357" "GSM4874358"
## 这里gsub函数中'_SAM.*'这个pattern中的.表示换行符以外的任意字符,*表示前面的字符(组)将被匹配零次或多次。
到这里,samples这个样品名字的向量就只剩下样品名了。全部代码如下:
rm(list=ls())
library(data.table)
dir='GSE160512_RAW/'
samples=list.files(dir)
samples=gsub('.txt.gz','',samples)
samples=gsub('_SAM.*','',samples)
samples