Patch for the "c" issue submitted:
https://bugs.r-project.org/bugzilla3/show_bug.cgi?id=15681


On Sat, Feb 22, 2014 at 2:56 PM, Michael Lawrence <micha...@gene.com> wrote:

>
>
>
> 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