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 > [[alternative HTML version deleted]]
_______________________________________________ Bioc-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/bioc-devel