Question: topGO crashes with ' argument "annotationFun" is missing, with no default'
0
2.9 years ago by
European Union

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:

library(org.Hs.eg.db)
library(topGO)

## my data has HGCN symbols as ID, so let's invent some data:
gene.names <- keys(org.Hs.eg.db, 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)
allGenes=genes,
geneSel=function(v){v>250},
nodeSize=10,
annnotationFun=annFUN.db, # clearly passing required argument here ....
mapping="org.Hs.eg.db",
ID="SYMBOL")

sessionInfo()

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

locale:
[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
[21] org.Hs.eg.db_3.4.0
[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
modified 2.9 years ago by James W. MacDonald51k • written 2.9 years ago by Philip Lijnzaad160
1

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 = annFUN.org, rather than annot = annFUN.db.

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

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, ...)
NULL

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.

Answer: topGO crashes with ' argument "annotationFun" is missing, with no default'
1
2.9 years ago by
United States
James W. MacDonald51k wrote:

The argument is annotationFun, not annnotationFun.