Michael, Why not just load the help page for the function if it's not a generic instead of throwing an error?
Also, it's possible that it skipping missing arguments and going straight to any is a bug in help, rather than the designed behavior. Perhaps we should check? ~G On Fri, Feb 21, 2014 at 2:01 PM, Michael Lawrence <lawrence.mich...@gene.com > wrote: > This function seems to solve the problem: > > helpwith <- function(expr) { > env <- IRanges:::top_prenv(expr) > expr <- substitute(expr) > fun <- eval(expr[[1L]], env) > fun.name <- deparse(expr[[1L]]) > if (!isGeneric(fun.name, env)) { > stop("'expr' must be a call to a generic") > } > args <- formals(fun) > mc <- match.call(fun, expr, expand.dots=FALSE) > args[names(mc[-1L])] <- mc[-1L] > args <- args[fun@signature] > args$... <- args$...[[1L]] > target.sig <- vapply(args, function(arg) { > .arg <- arg # nice trick > if (missing(.arg)) { > "missing" > } else { > class(eval(arg, env))[1L] > } > }, character(1)) > defined.sig <- selectMethod(fun, target.sig)@defined > help(paste0(fun.name, ",", paste(defined.sig, collapse=","), "-method")) > } > > path_to_gff <- "my.gff" > helpwith(import(path_to_gff)) > > helpwith(rbind(DataFrame(mtcars), DataFrame(mtcars))) > > But where should it go? > > > > On Fri, Feb 21, 2014 at 11:17 AM, Hervé Pagès <hpa...@fhcrc.org> wrote: > >> Hi Gabriel, >> >> >> On 02/20/2014 05:03 PM, Gabriel Becker wrote: >> >>> Herve, >>> >>> The help is correct (though possibly a bit pedantic), there is no >>> method for that signature. >>> >> >> But the dispatch mechanism is able to find one because >> 'import(path_to_gff)' *does* work. So the help maybe is correct >> but that doesn't really help the naive user. >> >> H. >> >> >>> ?import("", "") >>> >>> works for me though >>> >>> ~G >>> >>> >>> On Thu, Feb 20, 2014 at 4:51 PM, Hervé Pagès <hpa...@fhcrc.org >>> <mailto:hpa...@fhcrc.org>> wrote: >>> >>> On 02/20/2014 04:16 PM, Michael Lawrence wrote: >>> >>> There's also "?coverage(ga)", so the user can see what happens >>> specifically for their object, without worrying about typing out >>> the class. >>> >>> >>> I was never lucky with this: >>> >>> > library(rtracklayer) >>> > path_to_gff <- system.file("tests", "v1.gff", package = >>> "rtracklayer") >>> > ?import(path_to_gff) >>> Error in .helpForCall(topicExpr, parent.frame()) : >>> no documentation for function 'import' and signature 'con = >>> "character", format = "ANY", text = "ANY"' >>> In addition: Warning message: >>> In .helpForCall(topicExpr, parent.frame()) : >>> no method defined for function 'import' and signature 'con = >>> "character", format = "ANY", text = "ANY"' >>> >>> H. >>> >>> >>> At some point it would be neat to generate S4 documentation at >>> run-time. >>> Just popup a browser and see every method that might be >>> dispatched with >>> a given object. In theory, the R help server would support this. >>> >>> >>> On Thu, Feb 20, 2014 at 3:13 PM, Hervé Pagès <hpa...@fhcrc.org >>> <mailto:hpa...@fhcrc.org> >>> <mailto:hpa...@fhcrc.org <mailto:hpa...@fhcrc.org>>> wrote: >>> >>> >>> >>> On 02/20/2014 02:55 PM, Martin Morgan wrote: >>> >>> On 02/20/2014 02:32 PM, Hervé Pagès wrote: >>> >>> Hi Jesper, >>> >>> On 02/20/2014 02:13 PM, Jesper Gådin wrote: >>> >>> Very true that it is quite difficult to find the >>> documentation when one >>> is not aware of its existence :P >>> >>> >>> Yeah, this has been a source of frustration for >>> many people. And >>> always a source of embarrassment (for us) when >>> teaching our >>> software >>> to beginners. >>> >>> I've started to change this. In the upcoming >>> version of BioC >>> (2.14, >>> scheduled for mid-April), when you'll do ?coverage, >>> you'll >>> get to >>> choose between the 3 man pages that document >>> coverage >>> methods (there >>> is one in IRanges, one in GenomicRanges, and one in >>> GenomicAlignments). >>> >>> I want to generalize this to other generics that >>> have >>> methods spread >>> across several packages (e.g. findOverlaps, the >>> intra- and >>> inter-range >>> methods, etc...). >>> >>> Having to choose between several man pages every >>> time you do >>> e.g. >>> ?findOverlaps is a minor annoyance compared to not >>> being able to >>> find the man page at all. (Note that if you already >>> know >>> where is >>> your favorite man page, you'll be able to direct >>> access it with >>> e.g. ?GenomicRanges::findOverlaps). Nobody will >>> ever need to use >>> the insane >>> >>> ?`findOverlaps,GenomicRanges,____GenomicRanges-method` to >>> >>> >>> >>> >>> tab completion helps, so that you don't need to be >>> totally >>> insane, just >>> insane enough to know to start with >>> >>> ?"cover<tab> >>> >>> >>> and also insane enough to know which method you need to >>> pick up amongst >>> the 30+ methods listed by ?"findOverlaps<tab> >>> Overwhelming! >>> >>> H. >>> >>> >>> >>> Martin >>> >>> open that man page again. Ever! (it will still work >>> though...) >>> >>> Cheers, >>> H. >>> >>> >>> coverage() is fast and beautiful. Thanks! >>> >>> /Jesper >>> >>> >>> On Wed, Feb 19, 2014 at 9:21 PM, Hervé Pagès >>> <hpa...@fhcrc.org <mailto:hpa...@fhcrc.org> >>> <mailto:hpa...@fhcrc.org <mailto:hpa...@fhcrc.org>> >>> <mailto:hpa...@fhcrc.org >>> <mailto:hpa...@fhcrc.org> <mailto:hpa...@fhcrc.org >>> <mailto:hpa...@fhcrc.org>>>> wrote: >>> >>> Hi Jesper, >>> >>> >>> On 02/19/2014 08:44 AM, Michael Lawrence >>> wrote: >>> >>> On Wed, Feb 19, 2014 at 8:39 AM, >>> Jesper Gådin >>> <jesper.ga...@gmail.com >>> <mailto:jesper.ga...@gmail.com> >>> <mailto:jesper.ga...@gmail.com >>> <mailto:jesper.ga...@gmail.com>__> >>> <mailto:jesper.ga...@gmail.com >>> <mailto:jesper.ga...@gmail.com> >>> <mailto:jesper.ga...@gmail.com >>> <mailto:jesper.ga...@gmail.com>__>__>>wrote: >>> >>> >>> >>> Hi Michael, >>> >>> Herves suggestion will probably >>> work for my >>> use case, but if >>> there are any >>> smoother ways it would be >>> preferable. >>> >>> The use case is as follows: >>> >>> 1) calculate strand specific >>> coverage over >>> a region from >>> GAlignments object (or file) >>> >>> At the moment I read a file using >>> readGAlignmentsFromBam() >>> with tag="XS", >>> then filter it on "flag" and >>> "mapq". Then I >>> subset the >>> resulting GAlignments in a minus >>> and a plus >>> -strand object. >>> Then I calculate coverage by my own >>> coverage function which >>> uses the cigar >>> information in the GAlignments >>> object. This >>> function is the >>> one using >>> cigarToRleList() at the moment. As >>> I >>> understand the >>> coverage() function >>> from the GenomicAlignments/IRanges >>> package >>> does not take >>> into account >>> cigars, or does it? >>> >>> >>> It does take the coverage into account; >>> specifically to exclude >>> the introns >>> from coverage. I think there's also an >>> option >>> to exclude >>> deletions. >>> >>> >>> Unfortunately the man page is not easy to >>> access >>> (you need to do >>> ?`coverage,GAlignments-method`______), but >>> >>> it says: >>> >>> The methods for GAlignments and >>> GAlignmentPairs >>> objects do: >>> >>> coverage(grglist(x), ...) >>> >>> And if you do grglist() on a GAlignments or >>> GAlignmentPairs >>> objects, the >>> ranges you get in the returned GRangesList >>> object >>> are calculated >>> based >>> on the CIGAR. >>> >>> Trust but verify. Here is how you can >>> actually >>> verify that >>> coverage() >>> does take the CIGAR into account: >>> >>> library(RNAseqData.HNRNPC.bam. >>> ______chr14) >>> gal <- >>> >>> readGAlignments(RNAseqData.______HNRNPC.bam.chr14_BAMFILES[1]) >>> >>> >>> cig_op_table <- cigarOpTable(cigar(gal)) >>> >>> First we pick up an alignment with an N in >>> its >>> CIGAR and do >>> coverage() >>> on it: >>> >>> > gal_with_N <- gal[which(cig_op_table[ >>> , "N"] >>> != 0)[1]] >>> >>> > gal_with_N >>> GAlignments with 1 alignment and 0 >>> metadata columns: >>> seqnames strand cigar >>> qwidth >>> start end >>> width >>> <Rle> <Rle> <character> >>> <integer> >>> <integer> <integer> >>> <integer> >>> [1] chr14 + 55M2117N17M >>> 72 >>> 19650072 19652260 >>> 2189 >>> ngap >>> <integer> >>> [1] 1 >>> --- >>> seqlengths: >>> chr1 >>> chr10 ... >>> chrY >>> 249250621 >>> 135534747 ... >>> 59373566 >>> >>> > coverage(gal_with_N)$chr14 >>> integer-Rle of length 107349540 with 5 >>> runs >>> Lengths: 19650071 55 2117 >>> 17 >>> 87697280 >>> Values : 0 1 0 >>> 1 >>> 0 >>> >>> Same thing with an alignment with an I in >>> its CIGAR: >>> >>> > gal_with_I <- gal[which(cig_op_table[ >>> , "I"] >>> != 0)[1]] >>> >>> > gal_with_I >>> GAlignments with 1 alignment and 0 >>> metadata columns: >>> seqnames strand cigar >>> qwidth >>> start end >>> width >>> <Rle> <Rle> <character> >>> <integer> >>> <integer> <integer> >>> <integer> >>> [1] chr14 - 64M1I7M >>> 72 >>> 19411677 19411747 >>> 71 >>> ngap >>> <integer> >>> [1] 0 >>> --- >>> seqlengths: >>> chr1 >>> chr10 ... >>> chrY >>> 249250621 >>> 135534747 ... >>> 59373566 >>> >>> > coverage(gal_with_I)$chr14 >>> integer-Rle of length 107349540 with 3 >>> runs >>> Lengths: 19411676 71 87937793 >>> <tel:71%2087937793> >>> Values : 0 1 0 >>> >>> Same thing with an alignment with a D in >>> its CIGAR: >>> >>> > gal_with_D <- gal[which(cig_op_table[ >>> , "D"] >>> != 0)[1]] >>> >>> > gal_with_D >>> GAlignments with 1 alignment and 0 >>> metadata columns: >>> seqnames strand cigar >>> qwidth >>> start end >>> width >>> <Rle> <Rle> <character> >>> <integer> >>> <integer> <integer> >>> <integer> >>> [1] chr14 + 38M1D34M >>> 72 >>> 19659063 19659135 >>> 73 >>> ngap >>> <integer> >>> [1] 0 >>> --- >>> seqlengths: >>> chr1 >>> chr10 ... >>> chrY >>> 249250621 >>> 135534747 ... >>> 59373566 >>> >>> > coverage(gal_with_D)$chr14 >>> integer-Rle of length 107349540 with 3 >>> runs >>> Lengths: 19659062 73 87690405 >>> Values : 0 1 0 >>> >>> Seeing is believing, >>> >>> Cheers, >>> H. >>> >>> >>> >>> I started to look at the >>> applyPileups() in >>> Rsamtools which I >>> can get to >>> calculate coverage using cigars, >>> but not >>> using the strand or >>> flag >>> information for filtering. That >>> solution >>> would start from a >>> bam-file >>> instead of a GAlignments object, >>> and sure I >>> can do the >>> filtering outside R. >>> But it would be very convenient to >>> do it >>> all from within R. >>> >>> If there are nice solutions >>> starting from >>> both a GAlignments >>> and a >>> bam-file it would be great! =) >>> >>> /Jesper >>> >>> >>> >>> On Tue, Feb 18, 2014 at 10:52 PM, >>> Michael >>> Lawrence < >>> lawrence.mich...@gene.com <mailto:lawrence.mich...@gene.com> >>> <mailto:lawrence.michael@gene.__com >>> <mailto:lawrence.mich...@gene.com>> >>> <mailto:lawrence.michael@gene. >>> <mailto:lawrence.michael@gene.>____com >>> >>> >>> <mailto:lawrence.michael@gene.__com >>> <mailto:lawrence.mich...@gene.com>>>> wrote: >>> >>> Hi Jesper, >>> >>> Would you be willing to >>> volunteer your >>> use case? As >>> Herve hinted, >>> cigarToRleList and friends are >>> low-level helpers. There >>> may be an easier >>> way to achieve what you want, >>> or an >>> opportunity to >>> improve things. >>> >>> Michael >>> >>> >>> On Mon, Feb 17, 2014 at 1:10 >>> AM, Jesper >>> Gådin >>> <jesper.ga...@gmail.com >>> <mailto:jesper.ga...@gmail.com> >>> <mailto:jesper.ga...@gmail.com >>> <mailto:jesper.ga...@gmail.com>__> >>> <mailto:jesper.ga...@gmail.com >>> <mailto:jesper.ga...@gmail.com> >>> <mailto:jesper.ga...@gmail.com >>> <mailto:jesper.ga...@gmail.com>__>__>>wrote: >>> >>> >>> >>> Hi, >>> >>> Have come across a >>> cigar-vector >>> that is problematic >>> to process. >>> >>> #load package >>> >>> >>> library(GenomicAlignments) >>> >>> >>> #load data (see attached >>> file) >>> >>> >>> load("2014-02-17-cigarExample.______rdata") >>> >>> >>> >>> >>> #run function >>> cigarToRleList >>> >>> cigarRle <- >>> cigarToRleList(cigarExample) >>> >>> Error in >>> .Call2("Rle_constructor", >>> values, lengths, >>> check, 0L, PACKAGE = >>> "IRanges") : >>> integer overflow while >>> summing >>> elements in >>> 'lengths' >>> >>> sessionInfo() >>> >>> R Under development >>> (unstable) >>> (2013-11-13 r64209) >>> Platform: >>> x86_64-unknown-linux-gnu >>> (64-bit) >>> >>> locale: >>> [1] LC_CTYPE=en_US.UTF-8 >>> LC_NUMERIC=C >>> [3] LC_TIME=en_US.UTF-8 >>> LC_COLLATE=en_US.UTF-8 >>> [5] >>> LC_MONETARY=en_US.UTF-8 >>> LC_MESSAGES=en_US.UTF-8 >>> [7] LC_PAPER=en_US.UTF-8 >>> LC_NAME=C >>> [9] LC_ADDRESS=C >>> LC_TELEPHONE=C >>> [11] >>> LC_MEASUREMENT=en_US.UTF-8 >>> LC_IDENTIFICATION=C >>> >>> attached base packages: >>> [1] parallel stats >>> graphics >>> grDevices utils >>> datasets methods >>> [8] base >>> >>> other attached packages: >>> [1] >>> GenomicAlignments_0.99.18 >>> Rsamtools_1.15.26 >>> [3] Biostrings_2.31.12 >>> XVector_0.3.6 >>> [5] GenomicRanges_1.15.26 >>> IRanges_1.21.23 >>> [7] BiocGenerics_0.9.3 >>> >>> loaded via a namespace >>> (and not >>> attached): >>> [1] BatchJobs_1.1-1135 >>> BBmisc_1.5 >>> BiocParallel_0.5.8 >>> bitops_1.0-6 >>> >>> [5] brew_1.0-6 >>> codetools_0.2-8 >>> DBI_0.2-7 >>> digest_0.6.4 >>> >>> [9] fail_1.2 >>> foreach_1.4.1 >>> iterators_1.0.6 >>> plyr_1.8 >>> >>> [13] RSQLite_0.11.4 >>> sendmailR_1.1-2 >>> stats4_3.1.0 >>> tools_3.1.0 >>> >>> [17] zlibbioc_1.9.0 >>> >>> >>> >>> _____________________________________________________ >>> >>> Bioc-devel@r-project.org <mailto:Bioc-devel@r-project.org> >>> <mailto:Bioc-devel@r-project.__org >>> <mailto:Bioc-devel@r-project.org>> >>> >>> <mailto:Bioc-devel@r-project. >>> <mailto:Bioc-devel@r-project.>____org >>> >>> <mailto:Bioc-devel@r-project.__org >>> <mailto:Bioc-devel@r-project.org>>> mailing list >>> https://stat.ethz.ch/mailman/______listinfo/bioc-devel >>> <https://stat.ethz.ch/mailman/____listinfo/bioc-devel> >>> >>> >>> <https://stat.ethz.ch/mailman/____listinfo/bioc-devel >>> <https://stat.ethz.ch/mailman/__listinfo/bioc-devel>> >>> >>> >>> >>> <https://stat.ethz.ch/mailman/____listinfo/bioc-devel >>> <https://stat.ethz.ch/mailman/__listinfo/bioc-devel> >>> >>> <https://stat.ethz.ch/mailman/__listinfo/bioc-devel >>> <https://stat.ethz.ch/mailman/listinfo/bioc-devel>>> >>> >>> >>> >>> >>> >>> [[alternative HTML version >>> deleted]] >>> >>> >>> >>> >>> >>> _____________________________________________________ >>> >>> Bioc-devel@r-project.org <mailto:Bioc-devel@r-project.org> >>> <mailto:Bioc-devel@r-project.__org >>> <mailto:Bioc-devel@r-project.org>> >>> <mailto:Bioc-devel@r-project. >>> <mailto:Bioc-devel@r-project.>____org >>> >>> <mailto:Bioc-devel@r-project.__org >>> <mailto:Bioc-devel@r-project.org>>> >>> mailing list >>> https://stat.ethz.ch/mailman/______listinfo/bioc-devel >>> <https://stat.ethz.ch/mailman/____listinfo/bioc-devel> >>> >>> <https://stat.ethz.ch/mailman/____listinfo/bioc-devel >>> <https://stat.ethz.ch/mailman/__listinfo/bioc-devel>> >>> >>> >>> >>> <https://stat.ethz.ch/mailman/____listinfo/bioc-devel >>> <https://stat.ethz.ch/mailman/__listinfo/bioc-devel> >>> >>> <https://stat.ethz.ch/mailman/__listinfo/bioc-devel >>> <https://stat.ethz.ch/mailman/listinfo/bioc-devel>>> >>> >>> >>> -- >>> Hervé Pagès >>> >>> Program in Computational Biology >>> Division of Public Health Sciences >>> Fred Hutchinson Cancer Research Center >>> 1100 Fairview Ave. N, M1-B514 >>> P.O. Box 19024 >>> Seattle, WA 98109-1024 >>> >>> E-mail: hpa...@fhcrc.org >>> <mailto:hpa...@fhcrc.org> <mailto:hpa...@fhcrc.org >>> <mailto:hpa...@fhcrc.org>> >>> <mailto:hpa...@fhcrc.org >>> <mailto:hpa...@fhcrc.org> <mailto:hpa...@fhcrc.org >>> <mailto:hpa...@fhcrc.org>>> >>> >>> Phone: (206) 667-5791 >>> <tel:%28206%29%20667-5791> <tel:%28206%29%20667-5791> >>> <tel:%28206%29%20667-5791> >>> Fax: (206) 667-1319 >>> <tel:%28206%29%20667-1319> <tel:%28206%29%20667-1319> >>> <tel:%28206%29%20667-1319> >>> >>> >>> >>> >>> >>> >>> -- >>> Hervé Pagès >>> >>> Program in Computational Biology >>> Division of Public Health Sciences >>> Fred Hutchinson Cancer Research Center >>> 1100 Fairview Ave. N, M1-B514 >>> P.O. Box 19024 >>> Seattle, WA 98109-1024 >>> >>> E-mail: hpa...@fhcrc.org <mailto:hpa...@fhcrc.org> >>> <mailto:hpa...@fhcrc.org <mailto:hpa...@fhcrc.org>> >>> Phone: (206) 667-5791 <tel:%28206%29%20667-5791> >>> <tel:%28206%29%20667-5791> >>> Fax: (206) 667-1319 <tel:%28206%29%20667-1319> >>> <tel:%28206%29%20667-1319> >>> >>> >>> >>> -- >>> Hervé Pagès >>> >>> Program in Computational Biology >>> Division of Public Health Sciences >>> Fred Hutchinson Cancer Research Center >>> 1100 Fairview Ave. N, M1-B514 >>> P.O. Box 19024 >>> Seattle, WA 98109-1024 >>> >>> E-mail: hpa...@fhcrc.org <mailto:hpa...@fhcrc.org> >>> Phone: (206) 667-5791 <tel:%28206%29%20667-5791> >>> Fax: (206) 667-1319 <tel:%28206%29%20667-1319> >>> >>> _________________________________________________ >>> Bioc-devel@r-project.org <mailto:Bioc-devel@r-project.org> mailing >>> list >>> https://stat.ethz.ch/mailman/__listinfo/bioc-devel >>> >>> <https://stat.ethz.ch/mailman/listinfo/bioc-devel> >>> >>> >>> >>> >>> -- >>> Gabriel Becker >>> Graduate Student >>> Statistics Department >>> University of California, Davis >>> >> >> -- >> Hervé Pagès >> >> Program in Computational Biology >> Division of Public Health Sciences >> Fred Hutchinson Cancer Research Center >> 1100 Fairview Ave. N, M1-B514 >> P.O. Box 19024 >> Seattle, WA 98109-1024 >> >> E-mail: hpa...@fhcrc.org >> Phone: (206) 667-5791 >> Fax: (206) 667-1319 >> > > -- Gabriel Becker Graduate Student Statistics Department University of California, Davis [[alternative HTML version deleted]]
_______________________________________________ Bioc-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/bioc-devel