2011/11/29 Hervé Pagès <hpages@fhcrc.org>

> Hi Michael,
>
>
> On 11-11-23 02:15 PM, Michael Lawrence wrote:
>
>> Hi guys,
>>
>> So it looks like Herve? added some nice new coercions from list to various
>> AtomicList types. These delegate to the constructors. I noticed that the
>> constructors perform the coercion, but they also preserve names (on each
>> element). This is different from the base R coercions, which drop the
>> names.
>>
>
> The base R coercions do different things:
>
> > x <- c(a=1, b=2)
>
> > as.integer(x)
> [1] 1 2
>
> > as(x, "integer")
> a b
> 1 2
>
> > as.list(x)
> $a
> [1] 1
>
> $b
> [1] 2
>
> > as(x, "list")
> [[1]]
> [1] 1
>
> [[2]]
> [1] 2
>
>
>
>  Probably being too picky. Also, these are not pure coercions, but in
>> some ways a "promotion" to list from List. So that's fine with me. I think
>> we could probably add a coercion from "list" to the base list (not
>> compressed or simple). For example,  CharacterList would be an alias for
>> the CompressedCharacterList coercion.
>>
>
> Yes, we could do that. That means we make CompressedList the preferred
> way to represent List (vs SimpleList), which is fine I guess because
> this is what the constructors (e.g. IntegerList()) already do by having
> 'compress=TRUE' by default.
>
>
>
>> A related question though: what about coercions from a generic AtomicList
>> to each of the specific types. We do not have those, but they would be
>> useful. Would those need to drop their names? Consistency is not the only
>> concern: it would be faster not to preserve them.
>>
>
> Looks like you already added them:
>
>
Yes, I ended up sticking some in there for the sake of discussion. They're
only for the base list (CharacterList, NumericList), and do not have
specific coercions for Simple and Compressed.


> > as(IntegerList(a=1:3, b=2:-1), "CharacterList")
> CompressedCharacterList of length 2
> [["a"]] 1 2 3
> [["b"]] 2 1 0 -1
>
> > as(IntegerList(a=1:3, b=2:-1), "NumericList")
> CompressedNumericList of length 2
> [["a"]] 1 2 3
> [["b"]] 2 1 0 -1
>
> > as(IntegerList(a=1:3, b=2:-1, compress=FALSE), "NumericList")
> CompressedNumericList of length 2
> [["a"]] 1 2 3
> [["b"]] 2 1 0 -1
>
> > as(IntegerList(a=letters[1:2], b="33"), "NumericList")
> CompressedNumericList of length 2
> [["a"]] <NA> <NA>
> [["b"]] 33
> Warning message:
> In structure(as.integer(x), names = names(x)) : NAs introduced by coercion
>
> We don't have coercions for switching between CompressedList
> and SimpleList though:
>
> > as(IntegerList(a=1:3, b=2:-1), "SimpleList")
> Error in as(IntegerList(a = 1:3, b = 2:-1), "SimpleList") :
>  no method or default for coercing "CompressedIntegerList" to "SimpleList"
>
> Would they be useful too?
>
>
Perhaps the best strategy is to wait until we actually have a use case for
all the various coercions.


>
>
>> As an aside, it is currently very slow to construct a long e.g.
>> CharacterList, because of the lapply() performing the coercion. There are
>> obviously faster ways, especially if we do not care about the names.
>>
>
> Feel free to implement those faster ways. I think we should keep the
> names by default though e.g. by adding a use.names arg to the
> CharacterList() constructor (and to the other constructors), that is
> TRUE by default.
>
>
use.names is a good idea. Right now I do not need the faster ways for the
constructor, because the coercions above use the fast way. It might make
sense though to merge things so that the coercions are calling the
constructor.


> Thanks,
> H.
>
>
>> Michael
>>
>>        [[alternative HTML version deleted]]
>>
>> ______________________________**_________________
>> Bioc-devel@r-project.org mailing list
>> https://stat.ethz.ch/mailman/**listinfo/bioc-devel<https://stat.ethz.ch/mailman/listinfo/bioc-devel>
>>
>
>
> --
> Hervé Pagès
>
> Program in Computational Biology
> Division of Public Health Sciences
> Fred Hutchinson Cancer Research Center
> 1100 Fairview Ave. N, M1-B514
> P.O. Box 19024
> Seattle, WA 98109-1024
>
> E-mail: hpages@fhcrc.org
> Phone:  (206) 667-5791
> Fax:    (206) 667-1319
>

	[[alternative HTML version deleted]]

