AMDIS自建库结果导出函数
##########check format of MSL library
checkformat<-function(data){
colno<-which(data=="")
colno<-c(2,colno[1:length(colno)-1]+2)
extractdata<-data[colno]
for(i in 1:length(extractdata)){
extractdata[i]<-substr(extractdata[i],1,7)
}
check_ex<-which(extractdata!="COMMENT")
check_data<-colno[check_ex]
return(check_data)
}
########################
MSLexport<-function(data){
lib<-data.frame(Compound<-character(0),
CAS<-character(0),
RT<-numeric(0),
RI<-numeric(0),
Datafile<-character(0),
m1<-numeric(0),
m2<-numeric(0),
m3<-numeric(0),
m4<-numeric(0),
m5<-numeric(0))
colnames(lib)<-c("Compound","CAS","RT","RI","Datafile","mZ1","mZ2","mZ3","mz4","mz5")
colno<-which(data=="")
##########
##extract first compound information
Compound<-substr(data[1],6,nchar(data[1]))
CAS<-substr(data[5],7,nchar(data[5]))
RT<-substr(data[6],4,nchar(data[6]))
RI<-substr(data[3],4,nchar(data[3]))
Datafile<-substr(data[2],34,43)
#####################
peaknum<-as.numeric(substr(data[8],13,14))
mzlist<-data.frame(mz<-rep(0,peaknum),abundance<-rep(0,peaknum))
colnames(mzlist)<-c("mz","abundance")
remainder<-peaknum%%5
shang<-peaknum%/%5
for(m in 1:shang){
for(j in 1:5){
mzlist$mz[j+(m-1)*5]<-as.numeric(substr(data[colno[1]-shang-2+m],(11*j-9),(11*j-7)))
mzlist$abundance[j+(m-1)*5]<-as.numeric(substr(data[colno[1]-shang-2+m],(11*j-5),(11*j-2)))
}
}
if(remainder!=0)
for(j in 1:remainder){
mzlist$mz[5*shang+j]<-as.numeric(substr(data[colno[1]-1],(11*j-9),(11*j-7)))
mzlist$abundance[5*shang+j]<-as.numeric(substr(data[colno[1]-1],(11*j-5),(11*j-2)))
}
mzlist<-mzlist[order(mzlist$abundance,decreasing = T),]
###############################
mz1<-mzlist$mz[1]
mz2<-mzlist$mz[2]
mz3<-mzlist$mz[3]
mz4<-mzlist$mz[4]
mz5<-mzlist$mz[5]
##########
temp<-cbind(Compound,CAS,RT,RI,Datafile,mz1,mz2,mz3,mz4,mz5)
lib<-rbind(lib,temp)
#########bulid a loop based on the first compound information
for(i in 2:length(colno)-1){
Compound<-substr(data[colno[i]+1],6,nchar(data[colno[i]+1]))
CAS<-substr(data[colno[i]+5],7,nchar(data[colno[i]+5]))
RT<-substr(data[colno[i]+6],4,nchar(data[colno[i]+6]))
RI<-substr(data[colno[i]+3],4,nchar(data[colno[i]+3]))
Datafile<-substr(data[colno[i]+2],34,43)
#####################
peaknum<-as.numeric(substr(data[colno[i]+8],13,14))
mzlist<-data.frame(mz<-rep(0,peaknum),abundance<-rep(0,peaknum))
colnames(mzlist)<-c("mz","abundance")
remainder<-peaknum%%5
shang<-peaknum%/%5
for(m in 1:shang){
for(j in 1:5){
mzlist$mz[j+(m-1)*5]<-as.numeric(substr(data[colno[i+1]-shang-2+m],(11*j-9),(11*j-7)))
mzlist$abundance[j+(m-1)*5]<-as.numeric(substr(data[colno[i+1]-shang-2+m],(11*j-5),(11*j-2)))
}
}
if(remainder!=0)
for(j in 1:remainder){
mzlist$mz[5*shang+j]<-as.numeric(substr(data[colno[i+1]-1],(11*j-9),(11*j-7)))
mzlist$abundance[5*shang+j]<-as.numeric(substr(data[colno[i+1]-1],(11*j-5),(11*j-2)))
}
mzlist<-mzlist[order(mzlist$abundance,decreasing = T),]
###############################
mz1<-mzlist$mz[1]
mz2<-mzlist$mz[2]
mz3<-mzlist$mz[3]
mz4<-mzlist$mz[4]
mz5<-mzlist$mz[5]
##########
temp<-cbind(Compound,CAS,RT,RI,Datafile,mz1,mz2,mz3,mz4,mz5)
lib<-rbind(lib,temp)
}
lib$RT<-as.numeric(as.character(lib$RT))
lib$RI<-as.numeric(as.character(lib$RI))
lib<-lib[order(lib$RT),]
return(lib)
}
##############example############
source("C:/Users/Administrator/Desktop/Rscript/函数脚本/定性库MSL导出.R")
setwd("C:/Users/Administrator/Desktop")
data<-readLines("15rootstock-free.MSL")
str(data)
check_data<-checkformat(data)
#check format of MSL data according to print hint
lib<-MSLexport(data)
write.table(lib,file="15rootstock-freeMSL.csv",col.names = T,row.names = F,sep=",")
注:若在定性过程中更改过化合物名称,MSL文件中该化合物信息的顺序会乱,需要用记事本打开文件检查格式,因此,使用AMDIS定性时应该尽量不更改名称,用该函数导出结果后如有必要再更改。
checkformat<-function(data){
colno<-which(data=="")
colno<-c(2,colno[1:length(colno)-1]+2)
extractdata<-data[colno]
for(i in 1:length(extractdata)){
extractdata[i]<-substr(extractdata[i],1,7)
}
check_ex<-which(extractdata!="COMMENT")
check_data<-colno[check_ex]
return(check_data)
}
########################
MSLexport<-function(data){
lib<-data.frame(Compound<-character(0),
CAS<-character(0),
RT<-numeric(0),
RI<-numeric(0),
Datafile<-character(0),
m1<-numeric(0),
m2<-numeric(0),
m3<-numeric(0),
m4<-numeric(0),
m5<-numeric(0))
colnames(lib)<-c("Compound","CAS","RT","RI","Datafile","mZ1","mZ2","mZ3","mz4","mz5")
colno<-which(data=="")
##########
##extract first compound information
Compound<-substr(data[1],6,nchar(data[1]))
CAS<-substr(data[5],7,nchar(data[5]))
RT<-substr(data[6],4,nchar(data[6]))
RI<-substr(data[3],4,nchar(data[3]))
Datafile<-substr(data[2],34,43)
#####################
peaknum<-as.numeric(substr(data[8],13,14))
mzlist<-data.frame(mz<-rep(0,peaknum),abundance<-rep(0,peaknum))
colnames(mzlist)<-c("mz","abundance")
remainder<-peaknum%%5
shang<-peaknum%/%5
for(m in 1:shang){
for(j in 1:5){
mzlist$mz[j+(m-1)*5]<-as.numeric(substr(data[colno[1]-shang-2+m],(11*j-9),(11*j-7)))
mzlist$abundance[j+(m-1)*5]<-as.numeric(substr(data[colno[1]-shang-2+m],(11*j-5),(11*j-2)))
}
}
if(remainder!=0)
for(j in 1:remainder){
mzlist$mz[5*shang+j]<-as.numeric(substr(data[colno[1]-1],(11*j-9),(11*j-7)))
mzlist$abundance[5*shang+j]<-as.numeric(substr(data[colno[1]-1],(11*j-5),(11*j-2)))
}
mzlist<-mzlist[order(mzlist$abundance,decreasing = T),]
###############################
mz1<-mzlist$mz[1]
mz2<-mzlist$mz[2]
mz3<-mzlist$mz[3]
mz4<-mzlist$mz[4]
mz5<-mzlist$mz[5]
##########
temp<-cbind(Compound,CAS,RT,RI,Datafile,mz1,mz2,mz3,mz4,mz5)
lib<-rbind(lib,temp)
#########bulid a loop based on the first compound information
for(i in 2:length(colno)-1){
Compound<-substr(data[colno[i]+1],6,nchar(data[colno[i]+1]))
CAS<-substr(data[colno[i]+5],7,nchar(data[colno[i]+5]))
RT<-substr(data[colno[i]+6],4,nchar(data[colno[i]+6]))
RI<-substr(data[colno[i]+3],4,nchar(data[colno[i]+3]))
Datafile<-substr(data[colno[i]+2],34,43)
#####################
peaknum<-as.numeric(substr(data[colno[i]+8],13,14))
mzlist<-data.frame(mz<-rep(0,peaknum),abundance<-rep(0,peaknum))
colnames(mzlist)<-c("mz","abundance")
remainder<-peaknum%%5
shang<-peaknum%/%5
for(m in 1:shang){
for(j in 1:5){
mzlist$mz[j+(m-1)*5]<-as.numeric(substr(data[colno[i+1]-shang-2+m],(11*j-9),(11*j-7)))
mzlist$abundance[j+(m-1)*5]<-as.numeric(substr(data[colno[i+1]-shang-2+m],(11*j-5),(11*j-2)))
}
}
if(remainder!=0)
for(j in 1:remainder){
mzlist$mz[5*shang+j]<-as.numeric(substr(data[colno[i+1]-1],(11*j-9),(11*j-7)))
mzlist$abundance[5*shang+j]<-as.numeric(substr(data[colno[i+1]-1],(11*j-5),(11*j-2)))
}
mzlist<-mzlist[order(mzlist$abundance,decreasing = T),]
###############################
mz1<-mzlist$mz[1]
mz2<-mzlist$mz[2]
mz3<-mzlist$mz[3]
mz4<-mzlist$mz[4]
mz5<-mzlist$mz[5]
##########
temp<-cbind(Compound,CAS,RT,RI,Datafile,mz1,mz2,mz3,mz4,mz5)
lib<-rbind(lib,temp)
}
lib$RT<-as.numeric(as.character(lib$RT))
lib$RI<-as.numeric(as.character(lib$RI))
lib<-lib[order(lib$RT),]
return(lib)
}
##############example############
source("C:/Users/Administrator/Desktop/Rscript/函数脚本/定性库MSL导出.R")
setwd("C:/Users/Administrator/Desktop")
data<-readLines("15rootstock-free.MSL")
str(data)
check_data<-checkformat(data)
#check format of MSL data according to print hint
lib<-MSLexport(data)
write.table(lib,file="15rootstock-freeMSL.csv",col.names = T,row.names = F,sep=",")
注:若在定性过程中更改过化合物名称,MSL文件中该化合物信息的顺序会乱,需要用记事本打开文件检查格式,因此,使用AMDIS定性时应该尽量不更改名称,用该函数导出结果后如有必要再更改。
还没人转发这篇日记