Question: topGO crashes with ' argument "annotationFun" is missing, with no default'
gravatar for Philip Lijnzaad
2.9 years ago by
European Union
Philip Lijnzaad160 wrote:

What am I doing wrong here?  I scoured the (incomplete and confusing) documentation, but I get stuck at the 'new' function/method (which is not documented), which says

Building most specific GOs .....
Error in .local(.Object, ...) :
  argument "annotationFun" is missing, with no default

Yet I am clearly passing it:


## my data has HGCN symbols as ID, so let's invent some data:
gene.names <- keys(, keytype="SYMBOL")
genes <- rpois(n=gene.names, lambda=200)
names(genes) <- gene.names

## make Hb genes extra high:
hb.genes <- gene.names[grep('^HB', gene.names)]
genes[hb.genes] <- 2*genes[hb.genes]

go.obj <- new("topGOdata",
              ontology='BP',       # (docu has wrong name 'whichOnto' for this argument)
              annnotationFun=annFUN.db, # clearly passing required argument here ....


> sessionInfo()
R version 3.3.0 (2016-05-03)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: CentOS Linux 7 (Core)

[1] C

attached base packages:
[1] parallel  stats4    stats     datasets  graphics  grDevices utils    
[8] methods   base     

other attached packages:
 [1] propagate_1.0-4                        
 [2] minpack.lm_1.2-1                       
 [3] ff_2.2-13                              
 [4] bit_1.1-12                             
 [5] Rcpp_0.12.8                            
 [6] tmvtnorm_1.4-10                        
 [7] gmm_1.5-2                              
 [8] sandwich_2.3-4                         
 [9] Matrix_1.2-7.1                         
[10] mvtnorm_1.0-5                          
[11] MASS_7.3-45                            
[12] topGO_2.26.0                           
[13] SparseM_1.74                           
[14] graph_1.52.0                           
[15] RSQLite_1.1                            
[16] GO.db_3.4.0                            
[17] TxDb.Hsapiens.UCSC.hg19.knownGene_3.2.2
[18] GenomicFeatures_1.26.0                 
[19] GenomicRanges_1.26.1                   
[20] GenomeInfoDb_1.10.1                    
[22] AnnotationDbi_1.36.0                   
[23] IRanges_2.8.1                          
[24] S4Vectors_0.12.0                       
[25] Biobase_2.34.0                         
[26] BiocGenerics_0.20.0                    
[27] gdata_2.17.0                           
[28] plotrix_3.6-3                          
[29] uuutils_1.40                           
[30] gplots_3.0.1                           

loaded via a namespace (and not attached):
 [1] compiler_3.3.0             XVector_0.14.0            
 [3] bitops_1.0-6               tools_3.3.0               
 [5] zlibbioc_1.20.0            biomaRt_2.30.0            
 [7] digest_0.6.10              memoise_1.0.0             
 [9] lattice_0.20-34            DBI_0.5-1                 
[11] rtracklayer_1.34.1         Biostrings_2.42.0         
[13] gtools_3.5.0               caTools_1.17.1            
[15] grid_3.3.0                 XML_3.98-1.5              
[17] BiocParallel_1.8.1         matrixStats_0.51.0        
[19] Rsamtools_1.26.1           GenomicAlignments_1.10.0  
[21] SummarizedExperiment_1.4.0 KernSmooth_2.23-15        
[23] RCurl_1.95-4.8             zoo_1.7-13                


topgo bug • 904 views
ADD COMMENTlink modified 2.9 years ago by James W. MacDonald51k • written 2.9 years ago by Philip Lijnzaad160

grmpf, you are right, thank you! (would have been nice if one were warned with an 'unused argument' here ... ). It turns out that I had another mistake (made by trying out all the possible combinations of possibilities), it must be annot =, rather than annot = annFUN.db.

It would be nice to have some more and more diverse examples in the vignette though ...


ADD REPLYlink modified 2.9 years ago • written 2.9 years ago by Philip Lijnzaad160

It's not possible to have a warning like that, as the new function is intended to be a very general thing that allows you to generate a new instance of a particular class.

> args(new)
function (Class, ...)

There is only one established argument for new, and that's the class object. The rest are encapsulated in the ellipsis argument, and are thus defined in the class structure itself. And the class structure for topGOdata includes an ellipsis as well, so you can pass arbitrary arguments and it won't really care.

But you did get a really glaring hint! You were told that your annotationFun argument was missing, and you said 'oh huh, it's right there'. That's sort of on you, no? Your computer said 'hey dude, you're missing an argument here' and you didn't believe it, thinking that your cursory glance at the function call was superior to a computer's ability to correctly determine that fact. You will be wrong like 100% of the time that you play that game.

That said, the preferred way to do this sort of thing is to create a function that calls new internally, and that checks the arguments that are passed in, and gives an more useful error or warning message when things aren't OK. A canonical example of that would be, say, the GRanges function in GenomicRanges, which does a bunch of checking and then finally calls new to generate the output. But topGO is a really old package, and I suppose it's foolhardy to expect the author to come back and make big changes to the API at this late date.


ADD REPLYlink written 2.9 years ago by James W. MacDonald51k

I recommend this blog post if you want to learn more about what can it make.

ADD REPLYlink written 2.9 years ago by Lluís Revilla Sancho510
Answer: topGO crashes with ' argument "annotationFun" is missing, with no default'
gravatar for James W. MacDonald
2.9 years ago by
United States
James W. MacDonald51k wrote:

The argument is annotationFun, not annnotationFun.

ADD COMMENTlink written 2.9 years ago by James W. MacDonald51k
Please log in to add an answer.


Use of this site constitutes acceptance of our User Agreement and Privacy Policy.
Powered by Biostar version 16.09
Traffic: 218 users visited in the last hour