R语言中选取多个文件夹中的文件合并到新的文件夹

之前的帖子解决了在R语言中将多个同样的行列式文件合并起来的问题
今天在处理TCGA数据时发现,数据下载后是放在单独的文件夹中的,几百个文件夹里面都有一个我们需要的文件,
需要把他们转移到新的文件中去,我看到perl语言的处理方式,应该R语言也可以完成
我这么做的原因就是,
在使用R语言处理数据时有个观点,我从两个人那边听到的,但是我现在还不能凝练:

  • jimmy说,不要把数据导出为excel,然后下次又呆呆地导入,直接储存为”*.Rda”,要用的时候load即可,不需要来回读写
  • Y叔说,只要你还没有把图导出来打印,数据就是图,图就是数据,一切转换都有可能

对我而言,最直接的原因就是,在R语言中处理数据,突然间中断使用其他语言的脚本来处理某个过程,这个状态很诡异,再怎么说R语言也是语言,
和其他语言比对perl比,处理数据顶多只是复杂和简单的关系,不应该是不能完成才对!

##建立测试数据,创建10个文件夹,同时在每个文件夹中创立10个新的文件

##经过试验我发现,dir不能批量生成,需要使用for循环,但是file可以批量

1
2
3
4
for (i in 1:10) {
dir.create(paste0("tmp_",i)) #创建10个文件夹
file.create(paste0("tmp_",i,"/counts",i,".htq",seq(1:10))) #同时在每个文件夹中创立10个新的文件
}

查看数据,忽略TCGAbiolinks

dir()
[1] “111.R” “112.R” “TCGAbiolinks.Rproj”
[4] “TCGAbiolinks_2.5.7.zip” “tmp_1” “tmp_10”
[7] “tmp_2” “tmp_3” “tmp_4”
[10] “tmp_5” “tmp_6” “tmp_7”
[13] “tmp_8”

查看tmp_1文件夹中的内容

dir(“tmp_1”)
[1] “counts1.htq1” “counts1.htq10” “counts1.htq2” “counts1.htq3”
[5] “counts1.htq4” “counts1.htq5” “counts1.htq6” “counts1.htq7”
[9] “counts1.htq8” “counts1.htq9”

##任务:取每个文件夹中的第二个文件,就是名称以htq2结尾的文件

##并且把他们放到一个新的文件夹中去

1
2
3
4
5
dir.create("tmp_all") #创建新的文件夹
for (dirname in dir()[5:14]){
file <- list.files(dirname,pattern = "*.htq2") #找到对应文件夹中的内容,pattern可以是正则表达式
file.copy(paste0(dirname,"/",file),"tmp_all") #复制内容到新的文件夹
}

其中dir()[5:14] 只是因为我自己的文件夹下有很多别的东西,这里是选取我想要的文件夹

dir()[5:14]
[1] “tmp_1” “tmp_10” “tmp_2” “tmp_3” “tmp_4” “tmp_5” “tmp_6” “tmp_7”
[9] “tmp_8” “tmp_9”

我们看一下tmp_all是否已经有了文件

dir(“tmp_all”)
[1] “counts1.htq2” “counts10.htq2” “counts2.htq2” “counts3.htq2”
[5] “counts4.htq2” “counts5.htq2” “counts6.htq2” “counts7.htq2”
[9] “counts8.htq2” “counts9.htq2”

最终我发现,R语言处理起来也很简单!
有了一个隐蔽的博客真是好,随心所欲地记录。

------ 本文结束------