MetaboAnalystR深入探究
花了将近三天的时间把MetaboAnalystR(以下简称Met)装到了本地Rstudio,感觉遇到的困难基本都是网络环境引起的,Met的依赖包超多(没仔细数,大概100多个~~),我是不断切换镜像不断尝试才装全的,好像翻不翻墙也没区别。
安装好之后就开始测试了,Met的在线工具提供了所有运行的R代码,很方便,一遍做demo case,一遍从右侧显示栏中拷贝就可以。
Met的运行方式是先创建一个对象,从该对象的实例中调用所有的方法,然后把结果(包括原始数据,中间结果,参数,消息,计算结果)都存在一个list中,通过该list访问所有的数据。
如下所示,先创建实例:
library(MetaboAnalystR)
mSet<-InitDataObjects("conc", "stat", FALSE)
然后读入原始数据文件:
mSet<-Read.TextData(mSet, "example.csv", "rowu", "disc")
进行数据预处理:
mSet<-SanityCheckData(mSet)
mSet<-RemoveMissingPercent(mSet, percent=0.5)
mSet<-ImputeVar(mSet, method="colmin")
mSet<-PreparePrenormData(mSet)
mSet<-Normalization_new(mSet, "MedianNorm","NULL", "AutoNorm", ratio=FALSE, ratioNum=20) #Normalization by Median
mSet<-PlotNormSummary(mSet, "norm_0_", "png", 72, width=NA) mSet<-PlotSampleNormSummary(mSet, "snorm_0_", "png", 72, width=NA)
这个时候可以通过这个叫mSet的实例访问中间结果,例如查看标准化之后的数据:
> head(mSet$dataSet$norm)
38293 38768 38296 63436 62533 57814 43264 52984 63339 48761
DN-DIAN-04354 -0.4510268 -0.4108774 -0.3144024 0.281227 -0.4522143 -1.172844 2.002095 2.30048 1.155231 -0.07122195
48762 52603 53174 19130 34404 32391 20675 21049 34400 44621
DN-DIAN-04354 -0.09126524 0.5547339 1.381842 -0.1734245 1.613195 0.532853 -1.984583 -0.5925946 1.416321 -1.22541
52689 52673 52682 52677 52478 52477 52713 52716 52474 39270
DN-DIAN-04354 -0.8063881 0.03062653 -1.042814 -0.9823172 -0.9331347 0.6030661 -1.753723 -1.045334 -2.779916 -1.581398
52475 52748 52614 39271 33228 35186 34214 62558 62559 62566 62564
DN-DIAN-04354 0.7092436 0.03947284 0.7294586 -1.566635 -0.9731796 -0.7161951 0.8173107 2.039182 3.76508 2.181328 1.644228
各种可视化图保存在默认工作路径下。
接下来要扒开分析函数的内部代码了,通过Met在Github提供的链接,找到了所有的函数源码,可以查看内部的运算过程,例如做normalisation的函数:
Normalization_new <-function (mSetObj = NA, rowNorm, transNorm, scaleNorm, ref = NULL, ratio = FALSE, ratioNum = 20)
{
mSetObj <- .get.mSet(mSetObj)
data <- mSetObj$dataSet$prenorm
cls <- mSetObj$dataSet$prenorm.cls
if (substring(mSetObj$dataSet$format, 4, 5) == "ts") {
if (is.null(mSetObj$dataSet$prenorm.facA)) {
nfacA <- mSetObj$dataSet$facA
nfacB <- mSetObj$dataSet$facB
}
else {
nfacA <- mSetObj$dataSet$prenorm.facA
nfacB <- mSetObj$dataSet$prenorm.facB
}
... omit the rest....
如果认为哪一个函数需要修改或者debug,可以修改后重新定义。