Problem: Your samples may contain different amounts of freshweight, so you want to correct the peak intensities accordingly. The following snippet will take a vector of the same length as your number of samples, and apply the correction factor to each peak in the xcmsSet:

Code corrected for full pipeline processing - (thank you Axel) viewtopic.php?t=286&p=839#p839

library(xcms)

library(faahKO)

cdfpath <- system.file("cdf", package = "faahKO")

cdffiles <- list.files(cdfpath, recursive = TRUE,full=T)

faahko <- xcmsSet(cdffiles)

faahko <- group(faahko)

faahko <- retcor(faahko, p="m", f="s")

xset14<-fillPeaks(faahko)

Finish xcms processing before correcting. The next step, the diffreport will use the corrected numbers for the statistical analysis and for the box plots, if you have multiple classes. Also remember that the EICs are not corrected as they are generated directly from the original data files themselves.

Start the correction

#samples: 20 21 22 23 … example sample names

fw <- c(99.0, 94.3, 101.3, 83.4, …) #example fresh weights (mg)

#first part of factors, for detected peaks

factors1 <- rep(100/fw, times=table(peaks(xset13)[,"sample"]))

#second part of factors, for filled peaks

nrorigpeaks<-nrow(xset13@peaks)+1

nrtotalpeaks<-nrow(xset14@peaks)

factors2<-rep(100/fw, times=table(peaks(xset14)[nrorigpeaks:nrtotalpeaks,"sample"]))

#combine factors

factors<-c(factors1, factors2)

#weight correct

intensitycolumns <- c("into", "intb", "maxo")

xset14@peaks[,intensitycolumns] <- xset14@peaks[,intensitycolumns] * factors

old code

library(xcms)

library(faahKO)

xs <- faahko

## Example Freshweights

fw <- c(1.3, 0.6, 0.5, 0.6, 0.4, 2.4, 0.5, 0.8, 0.4, 0.7, 0.9, 0.9)

## Calculate correction factor for each peak

factors <- rep(1/fw, times=table(peaks(xs)[,"sample"]))

## Apply to peak intensities

intensitycolumns <- c("into", "intf", "maxo", "maxf")

xs@peaks[,intensitycolumns] <- xs@peaks[,intensitycolumns] * factors