[R-sig-Geo] Extend spacetime ST
Edzer Pebesma
edzer.pebesma at uni-muenster.de
Mon Jun 8 00:51:00 CEST 2015
On 06/07/2015 09:31 AM, chris english wrote:
> Edzer,
>
> Upon implementing your suggested:
>
>> setClass("watch_circ", contains = "ST", slots = c(ID = "character"))
>> showClass("watch_circ")
> Class "watch_circ" [in ".GlobalEnv"]
>
> Slots:
>
> Name: ID sp time endTime
> Class: character Spatial xts POSIXct
>
> Extends: "ST"
>
> I had to do more reading unless all I was going to say was "Wow".
>
>> setClass("watch_circ", contains = "ST", slots = c(ID = "character"))
>> showClass("watch_circ")
> Class "watch_circ" [in ".GlobalEnv"]
>
> Slots:
>
> Name: ID sp time endTime
> Class: character Spatial xts POSIXct
>
> Extends: "ST"
>
>> extends("watch_circ", fullInfo = TRUE)
> $ST
> An object of class "SClassExtension"
> Slot "subClass":
> [1] "watch_circ"
>
> Slot "superClass":
> [1] "ST"
>
> Slot "package":
> [1] ".GlobalEnv"
>
> Slot "coerce":
> function (from, strict = TRUE)
> {
> class(from) <- "ST"
> from
> }
>
> Slot "test":
> function (object)
> TRUE
> <bytecode: 0x19516f58>
> <environment: namespace:methods>
>
> Slot "replace":
> function (from, to, value)
> {
> for (what in c("sp", "time", "ID", "endTime")) slot(from,
> what) <- slot(value, what)
> from
> }
>
> Slot "simple":
> [1] TRUE
>
> Slot "by":
> character(0)
>
> Slot "dataPart":
> [1] FALSE
>
> Slot "distance":
> [1] 1
>
>
> $watch_circ
> [1] TRUE
>
>>
> Is there a way to control the slots =c(ID, "character") order as to
> prepending or postpending.
> ie. (sp, time, endTime, ID) vs (ID, sp, time, endTime), or is the
> behavior of subclassing the
> superclass necessarily going to prepend the subclass slot(s) to the
> superclass slots. It just seems on
> a vernacular level that the order (sp, time, endTime, ID) is more
> ST-like and signals the extending.
Slot order does not matter, as they're addressed only by name.
>
> contains = does just what I need, or more properly want, is powerful,
> and probably should be used
> with caution by the magician's apprentice.
>
> contains also leads me back to my prior 'wish list' of epochal endTimes.
> Even the constraint language
> of ST construction:
>
> if (any(is.na <http://is.na>(endTime)))
> stop("NA endTime values not allowed")
>
> suggests toying with the concept of multiple (user defined) endTimes, or
> it would merely say "NA endTime value not allowed", singular as to
> value, full stop. And with contains in mind and Pebesma (2008)
> "Customizing spatial data
> classes and methods" I start to see a way, ala Michael Sumner to
> potentially using epochal endTimes
> to extract all valid (or invalid for that matter) condition 2 quadrant 3
> paths for normals and subjects to
> evaluate as a TracksCollection. Well, we'll see.
You may want to think about subclassing STI instead of ST; ST is meant
as a virtual class, not something to actually hold data. It has some
methods, but only those that can be implemented identically for all
subclasses. STI for instance has a subsetting method, "[", as well as
over & aggregate.
>
> Thanks very much,
>
> Chris
>
>
>
>
> On Sat, Jun 6, 2015 at 9:47 AM, Edzer Pebesma
> <edzer.pebesma at uni-muenster.de <mailto:edzer.pebesma at uni-muenster.de>>
> wrote:
>
> Chris, I'd use the following for a class "watch_circ" that extends ST
> and adds a character ID slot:
>
> > setClass("watch_circ", contains = "ST", slots = c(ID = "character"))
> > showClass("watch_circ")
> Class "watch_circ" [in ".GlobalEnv"]
>
> Slots:
>
> Name: ID sp time endTime
> Class: character Spatial xts POSIXct
>
> Extends: "ST"
>
>
>
> >
>
> On 06/06/2015 07:58 AM, chris english wrote:
> > Hi,
> >
> > I am attempting to extent spacetime ST to include an ID class for a
> > spacetime watch circle object. I am doing this in order to be able to
> > relatively easily test that I have unique ID(s) across several similar
> > objects for plotting purposes.
> >
> > I can build my watch circle:
> >
> >> setClass("watch_circ",
> > + slots = c(sp = "Spatial", time = "xts", ID = "character",
> > + endTime = "POSIXct"),
> > + validity = function(object) {
> > + stopifnot(length(object at sp) >= 1)
> > + stopifnot(nrow(object at time) >= 1)
> > + stopifnot(is.char(object at ID))
> > + stopifnot(nrow(object at time) == length(object at endTime))
> > + # do the tzones if not set, if set
> > + tz1 = attr(object at time, "tzone")
> > + tz2 = attr(object at emdTime, "tzone")
> > + tz1.set = (!is.null(tz1) && !nchar(tz1)==0)
> > + tz2.set = (!is.null(tz2) && !nchar(tz2)==0)
> > + stopifnot(tz1 == tz2)
> > + if (tz1.set)
> > + stopifnot(tz1 == tz2)
> > + if (any(names(object at time) %in% names(object at sp)))
> > + stop("name conflict: attribute names in sp and time slot must
> differ")
> > + return(TRUE)
> > + }
> > + )
> >> getClassDef('watch_circ')
> > Class "watch_circ" [in ".GlobalEnv"]
> >
> > Slots:
> >
> > Name: sp time ID endTime
> > Class: Spatial xts character POSIXct
> >
> > But not extend ST.
> >
> >> setClass("watch_circ_1", representation = "ST")
> >> getClassDef('watch_circ_1')
> > Class "watch_circ_1" [in ".GlobalEnv"]
> >
> > Slots:
> >
> > Name: sp time endTime
> > Class: Spatial xts POSIXct
> >
> > Extends: "ST"
> >> ?what am I doing wrong here?
> >
> > This is probably due to my shallow understanding of the difference
> between
> > slots and representation, and possibly this whole operation is
> unnecessary
> > if plot checks sp for unique ID(s) among objects.
> >
> > Thanks in advance,
> >
> > Cheers,
> > Chris
> >
> > [[alternative HTML version deleted]]
> >
> > _______________________________________________
> > R-sig-Geo mailing list
> > R-sig-Geo at r-project.org <mailto:R-sig-Geo at r-project.org>
> > https://stat.ethz.ch/mailman/listinfo/r-sig-geo
> >
>
> --
> Edzer Pebesma
> Institute for Geoinformatics (ifgi), University of Münster,
> Heisenbergstraße 2, 48149 Münster, Germany; +49 251 83 33081
> <tel:%2B49%20251%2083%2033081>
> Journal of Statistical Software: http://www.jstatsoft.org/
> Computers & Geosciences: http://elsevier.com/locate/cageo/
> Spatial Statistics Society http://www.spatialstatistics.info
>
>
> _______________________________________________
> R-sig-Geo mailing list
> R-sig-Geo at r-project.org <mailto:R-sig-Geo at r-project.org>
> https://stat.ethz.ch/mailman/listinfo/r-sig-geo
>
>
--
Edzer Pebesma
Institute for Geoinformatics (ifgi), University of Münster,
Heisenbergstraße 2, 48149 Münster, Germany; +49 251 83 33081
Journal of Statistical Software: http://www.jstatsoft.org/
Computers & Geosciences: http://elsevier.com/locate/cageo/
Spatial Statistics Society http://www.spatialstatistics.info
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 490 bytes
Desc: OpenPGP digital signature
URL: <https://stat.ethz.ch/pipermail/r-sig-geo/attachments/20150607/0b053a8f/attachment.bin>
More information about the R-sig-Geo
mailing list