[BioC] subsetting IntegerList by list names

Steve Lianoglou mailinglist.honeypot at gmail.com
Wed Nov 16 18:25:43 CET 2011


Hi,

On Wed, Nov 16, 2011 at 12:09 PM, Martin Morgan <mtmorgan at fhcrc.org> wrote:
> On 11/16/2011 03:47 AM, Manuela Hummel wrote:
>>
>> Hi,
>>
>> I realized that subsetting an IntegerList object (and probably other
>> IRanges list objects) by the list names plus replacing list element values
>> behaves unexpectedly (at least for me) when the list is not sorted by its
>> element's names.
>>
>> Here a short example:
>>
>>> IL<- IntegerList(chr2=5, chr1=10)
>>
>>> IL
>>
>> CompressedIntegerList of length 2
>> [["chr2"]] 5
>> [["chr1"]] 10
>>
>> Now I want to subset based on the list names:
>>
>>> chrs<- c("chr1", "chr2")
>>
>>> IL[chrs]
>>
>> CompressedIntegerList of length 2
>> [["chr1"]] 10
>> [["chr2"]] 5
>>
>> This gives me the elements in the expected order.
>>
>> However, if I now want to replace the values of both elements, using the
>> subsetting as before, the order of the list and the new element values is
>> "mixed":
>>
>>> IL[chrs]<- list(100, 50)
>>
>>> IL
>>
>> CompressedNumericList of length 2
>> [["chr2"]] 100
>> [["chr1"]] 50
>>
>> I would have expected the value 100 for element "chr1" and 50 for element
>> "chr2".
>>
>> In this way at least it works with usual lists:
>>
>>> L<- list(chr2=5, chr1=10)
>>> L
>>
>> $chr2
>> [1] 5
>>
>> $chr1
>> [1] 10
>>
>>> L[chrs]<- list(100, 50)
>>> L
>>
>> $chr2
>> [1] 50
>>
>> $chr1
>> [1] 100
>
> Hi Manuela -- I think this is consistent with R ?
>
>> x = list(chr2=5, chr1=10)
>> chrs=c("chr1", "chr2")
>> x[chrs] = list(100, 50)
>> x
> $chr2
> [1] 50
>
> $chr1
> [1] 100

Maybe I'm missing it too, but it doesn't look like this is what the
SimpleList is doing ... it seems like SimpleList is assigning by order
and not name:

R> IL <- IntegerList(chr2=5, chr1=10)
R> L <- list(chr2=5, chr1=10)
R> all(sapply(IL, identity) == sapply(L, identity))
[1] TRUE


R> chrs <- c('chr1', 'chr2')
R> IL[chrs] <- list(100, 200)
R> L[chrs] <- list(100, 200)
R> all(sapply(IL, identity) == sapply(L, identity))
[1] FALSE

R> IL[['chr2']]
[1] 100

R> L[['chr2']]
[1] 200

Right?
I mean ... wrong? .. right?

-steve

-- 
Steve Lianoglou
Graduate Student: Computational Systems Biology
 | Memorial Sloan-Kettering Cancer Center
 | Weill Medical College of Cornell University
Contact Info: http://cbio.mskcc.org/~lianos/contact



More information about the Bioconductor mailing list