On Sat, Feb 22, 2014 at 2:04 PM, Hervé Pagès <hpa...@fhcrc.org> wrote:

>
>
> On 02/22/2014 01:59 PM, Michael Lawrence wrote:
>
>> Yea, I can see the argument for consistency. Not sure I'll get around to
>> it though. How about we see if they take this patch first.
>>
>
> Sounds good. I was hoping that fixing selectMethod would maybe
> fix ?generic(arg) automatically but that's probably too naive.
>
> In the meantime I tried the patch and got:
>
>   > library(IRanges)
>   > ?coverage(IRanges())
>   Error in args$...[[1L]] : object of type 'symbol' is not subsettable
>
>   > library(rtracklayer)
>   > path_to_gff <- system.file("tests", "v1.gff", package = "rtracklayer")
>   > ?import(path_to_gff)
>   Error in args$...[[1L]] : object of type 'symbol' is not subsettable
>
> which seems to go away if I add the following line
>
>   args <- args[fdef@signature]
>
> right before
>
>   args$... <- args$...[[1L]]
>
> like you did in your original helpwith() proposal.
>
>
Thanks for the catch. I've adapted the patch.


> Also I found a situation that is still failing (with or without the
> patch):
>
>   > ?c(IRanges(),IRanges())
>   Error in .helpForCall(topicExpr, parent.frame()) :
>     no documentation for function 'c' and signature 'x = "IRanges",
> recursive = "logical"'
>   In addition: Warning message:
>   In .helpForCall(topicExpr, parent.frame()) :
>     no method defined for function 'c' and signature 'x = "IRanges",
> recursive = "logical"'
>
>

Yea, we know the "c" generic is messed up. There's a bunch of variadic
primitive generics like all, any, sum, etc, that report extra arguments in
their signature, even though they only dispatch on the "x". I'll see if I
can submit a patch on this.


> Thanks again for working on this.
>
> H.
>
>
>
>> Michael
>>
>>
>> On Sat, Feb 22, 2014 at 12:26 PM, Hervé Pagès <hpa...@fhcrc.org
>> <mailto:hpa...@fhcrc.org>> wrote:
>>
>>     Thanks Michael.
>>
>>     Do you think it would be sensible to offer a similar fix for
>>     selectMethod?
>>
>>        > setGeneric("f", function(x, y) standardGeneric("f"))
>>        > setMethod("f", c("numeric", "missing"), function(x, y) x)
>>        > selectMethod("f", "numeric")
>>        Error in selectMethod("f", "numeric") :
>>          no method found for signature numeric, ANY
>>
>>     In a perfect world,
>>
>>        generic(arg)
>>        selectMethod(generic, class(arg))
>>        ?generic(arg)
>>
>>     should behave consistently.
>>
>>     The ?import(path_to_gff) error I reported earlier was actually
>>     inspired by a sad experience I had in the past where I was trying
>>     to use selectMethod("import", ...) to find out what particular
>>     method was being called (I needed to see the code).
>>
>>     Thanks,
>>     H.
>>
>>
>>     On 02/22/2014 05:59 AM, Michael Lawrence wrote:
>>
>>         Translated it into a patch against R, submitted here:
>>         https://bugs.r-project.org/__bugzilla3/show_bug.cgi?id=__15680
>>         <https://bugs.r-project.org/bugzilla3/show_bug.cgi?id=15680>
>>
>>
>>         On Fri, Feb 21, 2014 at 2:53 PM, Hervé Pagès <hpa...@fhcrc.org
>>         <mailto:hpa...@fhcrc.org>
>>         <mailto:hpa...@fhcrc.org <mailto:hpa...@fhcrc.org>>> wrote:
>>
>>
>>
>>              On 02/21/2014 02:01 PM, Michael Lawrence 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 <http://fun.name> <http://fun.name> <http://fun.name>
>>         <- deparse(expr[[1L]])
>>                      if (!isGeneric(fun.name <http://fun.name>
>>         <http://fun.name> <http://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 <http://fun.name>
>>         <http://fun.name> <http://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?
>>
>>
>>              Nice fix. It's a bug in ? so it would need to go into ?
>> itself.
>>
>>              The man page for ? (accessible with ?`?`) says:
>>
>>                 S4 Method Documentation:
>>
>>                    [...]
>>
>>                    There are two different ways to look for
>>         documentation on a
>>                    particular method.  The first is to supply the
>>         'topic' argument in
>>                    the form of a function call, omitting the 'type'
>>         argument.  The
>>                    effect is to look for documentation on the method
>>         that would be
>>                    used if this function call were actually evaluated.
>>         See the
>>                    examples below.  If the function is not a generic (no
>>         S4 methods
>>                    are defined for it), the help reverts to
>>         documentation on the
>>                    function name.
>>
>>              Thanks,
>>              H.
>>
>>
>>
>>
>>
>>                  On Fri, Feb 21, 2014 at 11:17 AM, 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 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>
>>         <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
>>         <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:
>>
>>                                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>>
>>                  <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 <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>
>>                  <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
>>         <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:
>>
>>
>>
>>                                         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>>>
>>                  <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
>>         <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>
>>                  <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 <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>>
>>                           <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 <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> <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
>>         <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>__>__>
>>                                    <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
>>         <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>
>>                  <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
>>         <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>__>
>>                           <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
>>         <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> <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
>>         <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>
>>                                    <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
>
>

        [[alternative HTML version deleted]]

_______________________________________________
Bioc-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/bioc-devel

Reply via email to