[BioC] Extracting strand information from GenomicFeatures transcript db objects

Valerie Obenchain vobencha at fhcrc.org
Wed Feb 13 00:19:36 CET 2013


Hello,

Thanks for sending a reproducible example. Sorry for the cryptic error 
message. That is something we could improve.

The problem is that for the UCSC data, some transcripts in a single gene 
are from different strands. In this case the strand Rle will have 
multiple runValues (i.e. runValue longer than 1).

When we summarize strand runValues by elementLength we see the UCSC data 
has runValues of 1, 2, 3, 4 and 5.

> table(elementLengths(runValue(strand(GenegroupedTranscripts))))

     1
37315
> table(elementLengths(runValue(strand(UCSCGenegroupedTranscripts))))

     1     2     3     4     5
21686    72     1     1     1

Here is a closer look at the entry that has an elementLength of 3:

> UCSC_elts <- elementLengths(runValue(strand(UCSCGenegroupedTranscripts)))
> UCSCGenegroupedTranscripts[UCSC_elts == 3]

GRangesList of length 1:
$108816
GRanges with 5 ranges and 2 metadata columns:
           seqnames               ranges strand |     tx_id     tx_name
              <Rle>            <IRanges>  <Rle> | <integer> <character>
   [1]         chr4 [42452733, 42476567]      + |     10641  uc008smu.1
   [2]         chr4 [42471253, 42471291]      + |     10642  uc008smv.1
   [3]         chr4 [41902019, 41925853]      - |     12216  uc008slb.1
   [4]         chr4 [41907295, 41907333]      - |     12217  uc008slg.1
   [5] chrUn_random [  588639,   612480]      + |     55359  uc012hdn.1


The strand Rle for this gene is,

> strand(UCSCGenegroupedTranscripts[UCSC_elts == 3])
CompressedRleList of length 1
$`108816`
factor-Rle of length 5 with 3 runs
   Lengths: 2 2 1
   Values : + - +
Levels(3): + - *

In the case of multiple stands per list element (per gene in this case) 
you can't use as.integer(). It looks like you are after a vector of a 
single strand per gene. Depending on your use case you could remove 
these genes or set the strand of these genes to '*'.


Valerie



On 02/12/2013 08:11 AM, Veerendra GP wrote:
> Hello Everyone!
>
> Greetings!
>
> I am using "GenomicFeatures" library to create Transcript db objects for
> the mouse genome.
> I did it by using biomart, *makeTranscriptDbFromBiomart()* and also
> UCSC, makeTranscriptDbFromUCSC()
> functions.
>
> As I am interested in the strand information, I tried fetching the it using
> *as.integer(),* *runValue**()* & *strand()* functions. I am able to get it
> from the transcriptdb object, created using *makeTranscriptDbFromBiomart()* but
> ending up with an error when I am trying to do the same with
> transcriptdb object created using makeTranscriptDbFromUCSC() function*.*
>
> working code:
>
> mouseGNM <- makeTranscriptDbFromBiomart (biomart = "ensembl", dataset=
> "mmusculus_gene_ensembl");
> saveDb(mouseGNM, file="MouseGNM.sqlite");
> library("GenomicFeatures");
> MouseGNM<- loadDb("MouseGNM.sqlite");
> GenegroupedTranscripts<- transcriptsBy(MouseGNM, by = "gene");
> strand.info <-as.integer(runValue(strand(GenegroupedTranscripts)));
>
>> runValue(strand(GenegroupedTranscripts)) CompressedIntegerList of length
> 37315 [["ENSMUSG00000000001"]] 2 [["ENSMUSG00000000003"]] 2
> [["ENSMUSG00000000028"]] 2 [["ENSMUSG00000000031"]] 2
> [["ENSMUSG00000000037"]] 1 [["ENSMUSG00000000049"]] 1
> [["ENSMUSG00000000056"]] 1 [["ENSMUSG00000000058"]] 1
> [["ENSMUSG00000000078"]] 1 [["ENSMUSG00000000085"]] 1 ... <37305 more
> elements>
>
>> strand.info[1:100]
>   [1] 2 2 2 2 1 1 1 1 1 1 1 1 1 2 2 1 1 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 1 2 2
> 1 2 [38] 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 2 2 1 1 1 1 1 2 1
> 2 2 2 2 [75] 2 2 2 2 2 2 2 1 2 1 1 2 2 2 1 1 1 2 1 2 2 2 1 1 2 1
>
> here 2 is the antisense strand and 1 the sense strand
>
>
> UCSC.mouseGNM <- makeTranscriptDbFromUCSC(genome = "mm9", tablename =
> "knownGene");
> saveDb(UCSC.mouseGNM, file="UCSCMouseGNM.sqlite");
> UCSCMouseGNM<- loadDb("UCSCMouseGNM.sqlite");
> UCSCGenegroupedTranscripts<- transcriptsBy(UCSCMouseGNM, by = "gene");
> strand.info2<- as.integer(runValue(strand(UCSCGenegroupedTranscripts)));
>
>> runValue(strand(UCSCGenegroupedTranscripts))
> CompressedIntegerList of length 21761
> [["100009600"]] 2
> [["100009609"]] 2
> [["100009614"]] 1
> [["100012"]] 2
> [["100017"]] 2
> [["100019"]] 1
> [["100033459"]] 1
> [["100034251"]] 1
> [["100034361"]] 2
> [["100034684"]] 2
> ...
> <21751 more elements>
>
> *ERROR:*
>> strand.info2<- as.integer(runValue(strand(UCSCGenegroupedTranscripts)));
> Error in as.vector(x, mode = "integer") : coercing an AtomicList object to
> an atomic vector is supported only for objects with top-level elements of
> length <= 1
>
> I am not able to understand this error message, could anyone let me know
> what is going wrong in the code.
> Here is the session information.
>
>> sessionInfo() R version 2.15.2 (2012-10-26) Platform: x86_64-pc-linux-gnu
> (64-bit) locale: [1] LC_CTYPE=en_AU.UTF-8 LC_NUMERIC=C [3]
> LC_TIME=en_US.UTF-8 LC_COLLATE=en_AU.UTF-8 [5] LC_MONETARY=en_US.UTF-8
> LC_MESSAGES=en_AU.UTF-8 [7] LC_PAPER=C LC_NAME=C [9] LC_ADDRESS=C
> LC_TELEPHONE=C [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C attached
> base packages: [1] stats graphics grDevices utils datasets methods base
> other attached packages: [1] GenomicFeatures_1.10.1 AnnotationDbi_1.20.3
> Biobase_2.18.0 [4] GenomicRanges_1.10.5 IRanges_1.16.4 BiocGenerics_0.4.0
> loaded via a namespace (and not attached): [1] biomaRt_2.14.0
> Biostrings_2.26.2 bitops_1.0-5 BSgenome_1.26.1 [5] DBI_0.2-5
> parallel_2.15.2 RCurl_1.95-3 Rsamtools_1.10.2 [9] RSQLite_0.11.2
> rtracklayer_1.18.2 stats4_2.15.2 tools_2.15.2 [13] XML_3.95-0.1
> zlibbioc_1.4.0
>
>
> Thank you in advance.
> Regards,
>
> Veerendra.
>
>
>
>



More information about the Bioconductor mailing list