批量读入/读出数据
2020-03-06 本文已影响0人
超级无敌大蜗牛
批量读入数据
path="/home/zzz/data/data/Bcell_vitro/HM_AS/data05_corr/A3SS"
file_names <- list.files(pattern = ".txt") ## 将路径下.txt文件名储存到file_names这个变量中
for (i in 1:length(file_names)) { # length(file_names)指的是该向量的长度,可以理解为从第一个到最后一个
name<-gsub(".txt","",file_names[i]) #file_names是一个向量用[]来索引,那么file_names[1]表示上面赋值后第一个.txt文件名,当i = 1时, 就变成gsub(".txt,"",H3K27ac.txt), 那么就是将.txt前面的文件名截取出来赋值给name。
assign(name,read.table(file_names[i],header = T)) ##assign函数用来给变量赋值,如果需要直接将读进来的数据拿来作图,需要用到get函数,具体见下面。
}
assign函数在循环时候,给变量赋值,算是比较方便
1、给变量赋值
for (i in 1:(length(rowSeq)-1)){
assign(paste("nginx_server_fields7_", i, sep = ""), nginx_server_fields7[(rowSeq[(i-1)+1]):(rowSeq[i+1]), ])
}
2、通过for循环给变量a1、a2、a3赋值
for (i in 1:3){
assign(paste("a", i, sep = ""), i:10)
}
[1] "a1" "a2" "a3" "i"
> a1
[1] 1 2 3 4 5 6 7 8 9 10
> a2
[1] 2 3 4 5 6 7 8 9 10
3、get和assign联合用法
for(i in 1:3){
assign(paste("p", i, sep=""), i)
tmp <- get(paste("p", i, sep=""))
print(tmp)
}
[1] 1
[1] 2
[1] 3
ls()
[1] "i" "p1" "p2" "p3" "tmp"
批量读取list
path <- "F:/Rfile/OD-B/Data" ##文件目录
fileNames <- dir(path) ##获取该路径下的文件名
filePath <- sapply(fileNames, function(x){
paste(path,x,sep='/')}) ##生成读取文件路径
data <- lapply(filePath, function(x){
read.csv(x, header=T)}) ##读取数据,结果为list
从数据库中读取数据类似上面,获取要数据库里的文件名,写个正则筛选文件名后for循环读取。
批量输出
对结果批量输出csv文件,其中data为list格式
outPath <- "F:/Rfile/OD-B/Consequence" ##输出路径
out_fileName <- sapply(names(data),function(x){
paste(x, ".csv", sep='')}) ##csv格式
out_filePath <- sapply(out_fileName, function(x){
paste(outPath ,x,sep='/')}) ##输出路径名
##输出文件
for(i in 1:length(data)){
write.csv(data[[i]], file=out_filePath[i], row.name=F)
}
批量导入数据并进行作图
options(stringsAsFactors = F)
#批量导入数据
setwd("/Users/zzzhang/Desktop/data05_corr/A3SS")
file_names <- list.files(pattern = ".txt")
pdf("corr.pdf")
for (i in 1:length(file_names)) {
name<-gsub(".txt","",file_names[i])
assign(name,read.table(file_names[i],header = T))
data <- get(name)
p <- ggscatter(data, x = "HM", y = "PSI",add = "reg.line", conf.int = T, add.params = list(color = "blue",fill = "lightgray")) + stat_cor(method = "pearson")
print(p)
}
dev.off()
#画的图会被全部保存在一个pdf文件里面,方便查看,如果想要把每一个图单独保存,则需要如下命令:
setwd("/Users/zzzhang/Desktop/data05_corr/A3SS")
file_names <- list.files(pattern = ".txt")
for (i in 1:length(file_names)) {
name<-gsub(".txt","",file_names[i])
assign(name,read.table(file_names[i],header = T))
data <- get(name)
p <- ggscatter(data, x = "HM", y = "PSI",add = "reg.line", conf.int = T, add.params = list(color = "blue",fill = "lightgray")) + stat_cor(method = "pearson")
ggsave(p,file=paste(name,".pdf",sep=""))
}
参考:探路小猪猪, 写的很详细,很有用。