R语言循环多个文件画图生成一个or批量生成多个pdf文件
这是我第一次写简书上面的文章,为什么这一次提笔想记录一下整个下午自己遇见问题,解决问题的过程,以前都是自己解决完问题记录在有道云笔记上就OK了,今天感觉像这样的过程在以往的科研生活中遇见了很多次。遇见问题,解决问题,实验室的师兄师姐都有各自的事情忙,科研的道路上又不是一味的问别人请教别人,想想请教别人的前提还是得自己先谷歌百度,实在不能解决了再请教别人才更能理解别人在说什么,但是也有一个问题存在,问多了别人别人也没有那么多空闲时间来帮你,偶尔问问别人也不是不可,但总之一句话还得靠自己。下面我将我所遇见的问题及解决方法进行记录,并发表,希望更多的人能看见解决问题,节约时间去解决更多的问题。
背景
我有多个数据格式形式一样的文件,想循环所有文件,并将画出来的图存在一个pdf中或者一个文件生成一个pdf。根据个人需要,这两种结果会带来不同的方便。
(1)生成一个pdf:循环所有文件,将所有图生成在一个pdf中有利于查看,不用一个一个的文件打开。
(2)每个文件生成一个pdf:根据需求,避免重复繁琐的工作量。
解决问题过程
根据我的需求进行了谷歌以及百度的搜索,进行过相关词“R循环画图保存到1个pdf”、“R语言中使用ggsave保存”,“R语言批量画图”等等相关词,但是,然而,可是~做科研有时候就是这样,你想搜索的东西没有完美的匹配度,有人也做了相关的回答,但是不是你想要的那个样子,又或者是说没有你想要的那种结果,再或者是科研工作者们有很多已经解决了这个问题,但是像我开头说的那样自己会了记录到自己的笔记上,其他人遇见类似的问题反反复复,复复反反的谷歌百度还是查不到自己想要的东西。介于此,我这一次想记录下来,让更多的人看见,以后可以遇见这个问题很快解决。
如何解决(附上相关代码):
1.有多个格式相同,命名相似的文件,循环每个文件画图,每个文件生成相应的pdf文件
setwd("C:/Users/Hilary/Desktop/test")
file=list.files(getwd(),pattern = ".txt") ###将当前工作目录下文件名为.txt的文件找出
len=length(dir("C:/Users/Hilary/Desktop/test")) ###len当前路径中文件的个数
for (i in dir("C:/Users/Hilary/Desktop/test")){
name=sub(".txt","",i) ###将文件名中.txt前面的名字提出来,也为了后面批量生成文件名准备
cc <- paste("C:/Users/Hilary/Desktop/test","/",i,sep="") ###正确的找到文件的路径及名称
data<-read.table(cc,header=F,sep="\t") ###读取文件
names(data)=c("group","RI") ###data列名
p<-ggplot(data=data, aes(x=group,y=RI))+geom_boxplot(aes(fill=group),outlier.shape= NA)
ggsave(p,file=paste(name,".pdf",sep="")) ##ggsave批量生成name变量为名字的pdf文件
}
2.有多个格式相同,命名相似的文件,循环每个文件画图,每个文件所画出来的图生成到1个pdf文件中
setwd("C:/Users/Hilary/Desktop/test")
file=list.files(getwd(),pattern = ".txt")
data_all <- lapply(file,read.table) ###运用lappy函数进行file一个个存在列表里
pdf("plots.pdf")
for(i in data_all){
p<-ggplot(data=i, aes(x=V1,y=V2))+geom_boxplot(aes(fill=V1),outlier.shape= NA)
print(p) ###这一步简单又重要,当时自己就是卡在这里,知道这个命令的觉得很简单,不知道的就得查好久
}
dev.off()
以上便是,用R语言循环多个文件画图生成一个or批量生成多个pdf文件的解决方法啦,还是希望越来越多的人可以看见,遇见类似的问题可以很快的解决,不要像我一样不会的话一卡就卡了一下午,各种搜还都不到好的结果。
祝各位科研顺利,一路畅通(咦,虽然畅通有点点夸大)但是希望总是要有的。
科研路上奋斗的小猪猪
2019年3月25日