如何安装包,以便我可以使用调试器逐步执行其R代码?

时间:2017-01-16 23:27:29

标签: r debugging

我想安装DESeq2软件包,以便我可以使用调试器逐步完成它。

这个软件包的源代码可以通过GitHub获得,但是我不清楚如何安装软件包以便我可以在调试器中单步执行其R代码。

有办法做到这一点吗?

BTW,我尝试了this earlier thread中提出的方法,但我无处可去:

> trace(DESeq2::plotPCA, browser, at=1)
> devnull <- DESeq2::plotPCA(rld, intgroup = "q", returnData = TRUE)
Tracing DESeq2::plotPCA(rld, intgroup = "q", returnData = TRUE) step 1 
Called from: eval(expr, envir, enclos)
Browse[1]> n
debug: `{`
Browse[2]> n
debug: standardGeneric("plotPCA")
Browse[2]> n
> 

(即,在上面的n之后,我回到了顶级提示。)

如果我在顶级提示符下输入DESeq2::plotPCA,我得到的只是

> DESeq2::plotPCA
nonstandardGenericFunction for "plotPCA" defined from package "BiocGenerics"

function (object, ...) 
{
    standardGeneric("plotPCA")
}
<environment: 0x26bee20>
Methods may be defined for arguments: object
Use  showMethods("plotPCA")  for currently available ones.

我也试过找源DESeq2::plotPCA定义的源文件,但是这个失败了

Error in setMethod("plotDispEsts", signature(object = "DESeqDataSet"),  : 
  no existing definition for function ‘plotDispEsts’

很明显,在采购此文件之前需要进行一些设置。这种认识导致了这篇文章。

1 个答案:

答案 0 :(得分:1)

Martin Morgan的回答捕捉到了解决方案的精髓,但有几个gotchya的对新R用户来说非常混乱。这些来自于R使用的独特的面向对象形式,这对那些来自C / C ++或Python背景的人来说非常困惑。

在DESeq2 vignette之后使用我自己的数据集:

$ cat synth.dat
sample    g0     g1     g2     g3     g4     g5     g6     g7     g8     g9    
samp0    132    192    19     133    247    297    110    104    93     103    
samp1    173    152    23     139    245    307    83     77     76     123    
samp2    179    129    18     130    208    244    89     138    71     142        
samp3    178    145    22     157    323    277    79     93     102    97    
samp4    250    208    8      101    202    257    142    140    76     113    
samp5    221    157    12     79     261    341    140    94     56     123    
samp6    139    220    15     125    282    261    124    154    117    118    
samp7    213    121    16     115    377    322    117    154    57     81    
samp8    234    152    11     103    281    321    76     160    71     139        
samp9    254    120    13     134    323    207    122    122    82     91    
samp10   159    207    17     143    385    217    126    113    106    89     
samp11   214    136    14     90     364    365    149    102    93     111    
samp12   180    159    15     136    226    309    72     111    69     113    
samp13   151    137    17     122    229    297    131    108    112    70    
samp14   254    151    8      118    254    222    138    114    66     89    
samp15   275    121    13     105    238    408    122    156    57     72    
samp16   204    134    8      111    352    332    89     134    73     90         
samp17   265    144    11     144    211    281    134    98     71     114        
samp18   212    111    14     138    321    391    84     112    88     96    
samp19   155    164    12     119    174    380    129    106    66     86    

$ cat synth_design_matrix.txt
samp0  group0
samp1  group0
samp2  group0
samp3  group0
samp4  group0
samp5  group0
samp6  group0
samp7  group0
samp8  group0
samp9  group0
samp10  group1
samp11  group1
samp12  group1
samp13  group1
samp14  group1
samp15  group1
samp16  group1
samp17  group1
samp18  group1
samp19  group1

> library("DESeq2")
> dat <- read.table(file="synth.dat", header=TRUE, stringsAsFactors=FALSE, row.names=1)
> groups <- read.table(file="synth_design_matrix.txt", header=FALSE, stringsAsFactors=TRUE, row.names=1)
> colnames(groups) <- c("condition")
> datM <- t(as.matrix(dat))
> dds  <- DESeqDataSetFromMatrix(countData = datM, colData = groups, design = ~condition)
> dds$condition <-relevel(dds$condition, ref="group0")
> vsd <- vst(dds, blind=FALSE, nsub=10)
-- note: fitType='parametric', but the dispersion trend was not well captured by the
   function: y = a/x + b, and a local regression fit was automatically substituted.
   specify fitType='local' or 'mean' to avoid this message next time.

现在指定跟踪点并逐步完成。

> trace(what="plotPCA", tracer=browser, at=1, signature=c("DESeqTransform"))
[1] "plotPCA"
> plotPCA(vsd)
Tracing function ".local" in package "DESeq2"
Tracing .local(object, ...) step 1 
Called from: eval(expr, p)
Browse[1]> n
debug: `{`
Browse[2]> n
debug at /tmp/RtmpaiGvIe/R.INSTALL5ef336529904/DESeq2/R/plots.R#184: rv <- rowVars(assay(object))
Browse[2]> n
debug at /tmp/RtmpaiGvIe/R.INSTALL5ef336529904/DESeq2/R/plots.R#187: select <- order(rv, decreasing = TRUE)[seq_len(min(ntop, length(rv)))]
Browse[2]> n
debug at /tmp/RtmpaiGvIe/R.INSTALL5ef336529904/DESeq2/R/plots.R#190: pca <- prcomp(t(assay(object)[select, ]))
Browse[2]> c

现在这里是gotchya的:

  1. 您只能直接在包中导出的函数/类上设置跟踪点。它们将包含#' @export。有关简明的详细信息,请参阅Hillary Parker的blog。在此示例中,我们最终逐步执行plotPCA方法并进入在plotPCA.DESeqTransform函数中,该函数在DESeq2名称空间中不可见。

  2. 如果方法的签名有多个参数,则需要使用R的c()指定它。

  3. E.g。如果方法原型是:

    setMethod("spin", signature(object="star", value="numeric"), function(object, value){some stuff here})
    

    跟踪点将是

    trace(what="spin", tracer=browser, at=1, signature=c(object="star", value="numeric"))
    
    1. 小心替换方法。如果您不理解它们,在调试像DESeq2(有几个)这样的包时可能会非常混乱。有关详细信息,请参阅herehere

    2. 熟悉S4S3方法以及R object orientation。这样可以更容易理解包中发生的事情。

    3. 使用这些工具,您应该能够调试任何R软件包下载的CRAN或Bioconductor ,无需任何特殊的安装说明。