用循环刷刷刷读取一摞txt
今天是生信星球陪你的第369天
大神一句话,菜鸟跑半年。我不是大神,但我可以缩短你走弯路的半年~
就像歌儿唱的那样,如果你不知道该往哪儿走,就留在这学点生信好不好~
这里有豆豆和花花的学习历程,从新手到进阶,生信路上有你有我!
花花写于2019.5.16,昨天写错了日期,一不小心穿越到了三千年后
问题
学员发给我一个压缩包,解压后是这样的。

他想用循环读取这里面的所有txt文件,因为他们都具有同样的格式。
后台回复“刷刷刷”,把脚本加数据一起发给你。
思路
文件有100多个,可以先获取文件名,然后用for循环逐一读取进来,作为列表的100多个元素。这就涉及到了列表逐一添加元素的操作。
代码走起
step1 获取所有txt的文件名,构建为一个向量
options(stringsAsFactors = F)
file_list=dir()
head(file_list)
#[1] "1.R" "2.R" "test.Rproj"
#[4] "ABCA6 .txt" "ABCA9 .txt" "ABHD11 .txt"
可以看到前三个是多余的,后面是要读取的文件名,所以去掉前三个。(本步骤根据实际情况删除元素)
file_list=file_list[4:length(file_list)]
head(file_list)
#[1] "ABCA6 .txt" "ABCA9 .txt" "ABHD11 .txt" "ACY1 .txt" "ADAMTS1 .txt"
#[6] "ADAMTS8 .txt"
然后就可以将这个向量为for循环的输入了。
step2 构建一个空的列表,用于存放结果数据
singlegene_list=list()
这个是代码的核心思想:
先生成这个列表,每经历一个循环就向该列表添加一个元素。
step3 for循环逐一读取文件,存放于列表中
循环之前,先读取一个文件先看看
test=read.table(file=file_list[[1]],sep="t",header=T)
head(test)
# ID ABCA6 Type
#1 TCGA-A6-5667-11A-01R-1723-07 0.2943319 Normal
#2 TCGA-AA-3514-11A-01R-A32Z-07 0.1297727 Normal
#3 TCGA-AZ-6598-11A-01R-1774-07 0.4491950 Normal
#4 TCGA-A6-2682-11A-01R-A32Z-07 0.2772076 Normal
#5 TCGA-AZ-6601-11A-01R-1774-07 0.3272965 Normal
#6 TCGA-AA-3522-11A-01R-A32Z-07 0.3742182 Normal
由于每个元素默认没有名字,所以给它命名,可以看到读取的dataframe第二列的列名就是基因名,可以作为列表的每个元素的名字,names是否添加 是可选的,根据实际情况决定。
names(singlegene_list)[[1]]=colnames(singlegene_list[[1]])[2]
两步都测试成功,可以放进循环了
for(i in 1:length(file_list)){
singlegene_list[[i]]=read.table(file=file_list[[i]],sep="t",header=T)
names(singlegene_list)[[i]]=colnames(singlegene_list[[i]])[2]
}
100多个文件也不要很久,秒秒钟读完了,可以看到,循环使用的i已经变成了132L,也就说明读取了132个文件了。
接下来要对这个列表做点什么统一操作,可以使用函数lapply了。不会用?大招:
?lapply
需要示例数据,请在“生信星球”公众号回复“刷刷刷”,把脚本加数据一起发给你。
简书:小洁忘了怎么分身
隔壁生信技能树公益视频合辑(学习顺序是linux,r,软件安装,geo,小技巧,ngs组学!)
国内看B站,教学视频链接:https://m.bilibili.com/space/338686099
国外看YouTube,教学视频链接:https://m.youtube.com/channel/UC67sImqK7V8tSWHMG8azIVA/playlists友情链接:
点击底部的“阅读原文”,获得更好的阅读体验哦😻
初学生信,很荣幸带你迈出第一步。
我们是生信星球,一个不拽术语、通俗易懂的生信知识平台。由于是2018年新号,竟然没有留言功能。需要帮助或提出意见请后台留言、联系微信或发送邮件到jieandze1314@gmail.com,每一条都会看到的哦~
请关注“恒诺新知”微信公众号,感谢“R语言“,”数据那些事儿“,”老俊俊的生信笔记“,”冷🈚️思“,“珞珈R”,“生信星球”的支持!