[BioC] Selecting elements in GRanges object by element metadata
Kasper Daniel Hansen
kasperdanielhansen at gmail.com
Wed Jul 11 17:21:19 CEST 2012
What you are reporting is true for any (well, there may be exceptions
I guess) subsetting. Try for example with a standard matrix. The
solution is to add which(). Contrast
> x = c(1,2,NA)
> x == 2
[1] FALSE TRUE NA
> which(x == 2)
[1] 2
Kasper
On Wed, Jul 11, 2012 at 11:09 AM, Michael Muratet
<mmuratet at hudsonalpha.org> wrote:
> Greetings
>
> I would like to select elements from a GRanges object by testing values in
> the metadata columns. This seems to work OK:
>
> x.gr[which(elementMetadata(x.gr)$fdr<0.05)]
>
> So does this, although there's nothing in the documentation about the []
> operator accepting logical values:
>
> fosl2.th17.gr[elementMetadata(fosl2.th17.gr)$fdr<0.05]
>
> The problem arises when I try to select from a GRanges object where the
> metadata columns have NAs:
>
>> tss.annot.gr[na.omit(elementMetadata(tss.annot.gr)$GENE>0),"GENE"]
> GRanges with 4028 ranges and 1 elementMetadata col:
> seqnames ranges strand | GENE
> <Rle> <IRanges> <Rle> | <numeric>
> [1] chr1 [ 3659579, 3662079] - | <NA>
> [2] chr1 [ 4847394, 4849894] + | 0
> [3] chr1 [10025979, 10028479] - | <NA>
> [4] chr1 [17085879, 17088379] - | <NA>
> [5] chr1 [21067298, 21069798] - | <NA>
> [6] chr1 [21949662, 21952162] - | 0
> [7] chr1 [23388014, 23390514] - | <NA>
> [8] chr1 [23768264, 23770764] + | <NA>
> [9] chr1 [23927128, 23929628] - | <NA>
> ... ... ... ... ... ...
> [4020] chr2 [126607180, 126609680] - | 0
> [4021] chr2 [127345106, 127347606] - | 0
> [4022] chr2 [129195132, 129197632] + | -1.223140339
> [4023] chr2 [129194856, 129197356] - | -1.628782357
> [4024] chr2 [129360338, 129362838] - | -1.475535653
> [4025] chr2 [129837609, 129840109] + | 0
> [4026] chr2 [129948520, 129951020] + | 0
> [4027] chr2 [140213446, 140215946] - | 0
> [4028] chr2 [148267271, 148269771] - | -1.564551101
>
> The values returned violate the condition. It won't work at all without
> na.omit.
>
> I can coerce the GRanges object to a data.frame, do the selection and create
> a new GRanges object, but I'm hoping there is a way to do it directly.
>
> Am I using the syntax correctly? Is there something peculiar about a
> DataFrame vs a data.frame that's getting in the way?
>
> Thanks
>
> Mike
>
>
>
> Michael Muratet, Ph.D.
> Senior Scientist
> HudsonAlpha Institute for Biotechnology
> mmuratet at hudsonalpha.org
> (256) 327-0473 (p)
> (256) 327-0966 (f)
>
> Room 4005
> 601 Genome Way
> Huntsville, Alabama 35806
>
> _______________________________________________
> Bioconductor mailing list
> Bioconductor at r-project.org
> https://stat.ethz.ch/mailman/listinfo/bioconductor
> Search the archives:
> http://news.gmane.org/gmane.science.biology.informatics.conductor
More information about the Bioconductor
mailing list