Skip to content

Commit f0f0727

Browse files
committed
resolve matrix issue in mzrtsim and mzmlsim functions
1 parent c3539ee commit f0f0727

2 files changed

Lines changed: 39 additions & 29 deletions

File tree

R/mzmlsim.R

Lines changed: 26 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -111,23 +111,25 @@ simmzml <-
111111
}
112112
# chromotograghy simulation for the compound
113113
re <- c()
114-
for (i in c(1:n)) {
115-
gaussian_peak <-
116-
stats::dnorm(rtime0, mean = rtime[i], sd = peakrange[i] / 4)
117-
gaussian_peak <- gaussian_peak/max(gaussian_peak)*100*rf[i]*peakheight[i]
118-
# tailing simulation
119-
tailing_peak <-
120-
stats::dnorm(rtime0, mean = rtime[i], sd = (2*tailingfactor-1)*peakrange[i] / 4)
121-
tailing_peak <- tailing_peak/max(tailing_peak)*100*rf[i]*peakheight[i]
114+
if(n>0){
115+
for (i in 1:n) {
116+
gaussian_peak <-
117+
stats::dnorm(rtime0, mean = rtime[i], sd = peakrange[i] / 4)
118+
gaussian_peak <- gaussian_peak/max(gaussian_peak)*100*rf[i]*peakheight[i]
119+
# tailing simulation
120+
tailing_peak <-
121+
stats::dnorm(rtime0, mean = rtime[i], sd = (2*tailingfactor-1)*peakrange[i] / 4)
122+
tailing_peak <- tailing_peak/max(tailing_peak)*100*rf[i]*peakheight[i]
122123

123-
if(is.null(tailingindex)){
124-
# new peak with tailing
125-
peak <- c(gaussian_peak[1:which.max(gaussian_peak)],tailing_peak[(which.max(gaussian_peak)+1):length(rtime0)])
126-
}else{
127-
# indexed peaks tailing
128-
peak <- ifelse(i%in%tailingindex,c(gaussian_peak[1:which.max(gaussian_peak)],tailing_peak[(which.max(gaussian_peak)+1):length(rtime0)]),gaussian_peak)
124+
if(is.null(tailingindex)){
125+
# new peak with tailing
126+
peak <- c(gaussian_peak[1:which.max(gaussian_peak)],tailing_peak[(which.max(gaussian_peak)+1):length(rtime0)])
127+
}else{
128+
# indexed peaks tailing
129+
peak <- ifelse(i%in%tailingindex,c(gaussian_peak[1:which.max(gaussian_peak)],tailing_peak[(which.max(gaussian_peak)+1):length(rtime0)]),gaussian_peak)
130+
}
131+
re <- rbind(re,peak)
129132
}
130-
re <- rbind(re,peak)
131133
}
132134
spd <-
133135
S4Vectors::DataFrame(msLevel = 1L, rtime = rtime0)
@@ -151,16 +153,18 @@ simmzml <-
151153

152154
mzc <- rem <- c()
153155

154-
for (i in 1:nrow(re)) {
155-
if(length(mz[[i]])==1){
156+
if(n>0){
157+
for (i in 1:nrow(re)) {
158+
if(length(mz[[i]])==1){
156159

157-
nret <- intensity[[i]]*re[i,]
160+
nret <- intensity[[i]]*re[i,]
158161

159-
}else{
160-
nret <- matrix(intensity[[i]])%*%re[i,]
162+
}else{
163+
nret <- matrix(intensity[[i]])%*%re[i,]
164+
}
165+
mzc <- c(mzc,round(mz[[i]],digits = mzdigit))
166+
rem <- rbind(rem,nret)
161167
}
162-
mzc <- c(mzc,round(mz[[i]],digits = mzdigit))
163-
rem <- rbind(rem,nret)
164168
}
165169
if(length(mzc) > 0){
166170
alld <- stats::aggregate(rem,by=list(mzc),FUN=sum)

R/mzrtsim.R

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ mzrtsim <- function(ncomp = 100,
6868
# generate the base peaks
6969
if(is.null(db)){
7070
stop("You need database to simulate.")
71-
}else{
71+
}else if(ncomp > 0){
7272
name <- sapply(db,function(x) x$name)
7373
nameli <- sample(unique(name),ncomp)
7474
z <- db[which(name %in% nameli)]
@@ -84,6 +84,12 @@ mzrtsim <- function(ncomp = 100,
8484
compname <- unlist(name)
8585
compmz <- unlist(mz)
8686
compins <- unlist(nins)
87+
}else{
88+
namelist <- character()
89+
namelenth <- integer()
90+
compname <- character()
91+
compmz <- numeric()
92+
compins <- numeric()
8793
}
8894
# get peak numbers
8995
npeaks <- length(compname)
@@ -94,7 +100,7 @@ mzrtsim <- function(ncomp = 100,
94100
colnames(matrix0) <- colnames(matrix) <- bc
95101
rownames(matrix0) <- rownames(matrix) <- compname
96102

97-
for (i in 1:npeaks) {
103+
for (i in seq_len(npeaks)) {
98104
samplei <- abs(stats::rnorm(ncol, mean = compins[i],
99105
sd = compins[i] * samplersd[i]/100))
100106
matrix[i, ] <- samplei
@@ -110,7 +116,7 @@ mzrtsim <- function(ncomp = 100,
110116
ncompeak <- ncomp * ncpeaks
111117
nbpeak <- npeaks * nbpeaks
112118
# simulation of condition
113-
index <- sample(1:ncomp, ncompeak)
119+
index <- sample(seq_len(ncomp), ncompeak)
114120
compcon <- namelist[index]
115121
matrixc <- matrix[compname %in% compcon, ]
116122
ncpeak <- nrow(matrixc)
@@ -123,8 +129,8 @@ mzrtsim <- function(ncomp = 100,
123129
}
124130
matrix[compname %in% compcon, ] <- matrixc
125131
# simulation of batch
126-
indexb <- sample(1:npeaks, nbpeak)
127-
indexb <- 1:npeaks %in% indexb
132+
indexb <- sample(seq_len(npeaks), nbpeak)
133+
indexb <- seq_len(npeaks) %in% indexb
128134
matrixb <- matrix[indexb, ]
129135
matrixb0 <- matrix0[indexb, ]
130136
changeb <- changem <- changer <- NULL
@@ -134,7 +140,7 @@ mzrtsim <- function(ncomp = 100,
134140
}
135141
# generate random batch effect
136142
if(grepl('r',batchtype)){
137-
for (i in 1:nrow(matrixb)){
143+
for (i in seq_len(nrow(matrixb))){
138144
change <- abs(stats::rnorm(ncol(matrixb)))
139145
matrixb[i,] <- matrixb[i,]*change
140146
matrixb0[i,] <- matrixb0[i,]*change
@@ -143,7 +149,7 @@ mzrtsim <- function(ncomp = 100,
143149
}
144150
# generate increasing/decreasing batch effect
145151
if(grepl('m',batchtype)){
146-
for (i in 1:nrow(matrixb)){
152+
for (i in seq_len(nrow(matrixb))){
147153
changet <- seq(1,ncol(matrixb),length.out = ncol(matrixb)) * exp(stats::rnorm(1))
148154
change <- if (sample(c(T,F),1)) changet else rev(changet)
149155
matrixb[i,] <- matrixb[i,]*change

0 commit comments

Comments
 (0)