Entering edit mode
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] head(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 >
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 thanannot = 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.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 fortopGOdata
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, theGRanges
function inGenomicRanges
, which does a bunch of checking and then finally callsnew
to generate the output. ButtopGO
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.I recommend this blog post if you want to learn more about what can it make.