add S3 utility functions

attach the class to an object:
- osem_as_sensebox
- osem_as_measurements

retain the class after filtering / mutating / subsetting:
- filter.sensebox
- filter.osem_measurements
- mutate.sensebox
- mutate.osem_measurements
- `[.sensebox`
- `[.osem_measurements`
pull/17/head
noerw 7 years ago
parent c216ec9f61
commit ef2baa6559

@ -1,5 +1,7 @@
# Generated by roxygen2: do not edit by hand
S3method("[",osem_measurements)
S3method("[",sensebox)
S3method(osem_measurements,bbox)
S3method(osem_measurements,default)
S3method(osem_measurements,sensebox)
@ -8,6 +10,16 @@ S3method(plot,osem_measurements)
S3method(plot,sensebox)
S3method(print,sensebox)
S3method(summary,sensebox)
export(filter.osem_measurements)
export(filter.sensebox)
export(filter_.osem_measurements)
export(filter_.sensebox)
export(mutate.osem_measurements)
export(mutate.sensebox)
export(mutate_.osem_measurements)
export(mutate_.sensebox)
export(osem_as_measurements)
export(osem_as_sensebox)
export(osem_as_sf)
export(osem_box)
export(osem_boxes)

@ -28,3 +28,13 @@ utc_date = function (date) {
# NOTE: cannot handle mixed vectors of POSIXlt and POSIXct
date_as_isostring = function (date) format.Date(date, format = '%FT%TZ')
#' Simple factory function meant to implement dplyr functions for other classes,
#' which call an callback to attach the original class again after the fact.
#'
#' @param callback The function to call after the dplyr function
#' @noRd
dplyr_class_wrapper = function(callback) {
function(.data, ..., .dots) callback(NextMethod())
}

@ -41,8 +41,7 @@ get_measurements_ = function (..., endpoint) {
))
})
class(result) = c('osem_measurements', class(result))
result
osem_as_measurements(result)
}
get_stats_ = function (endpoint) {

@ -126,6 +126,5 @@ parse_senseboxdata = function (boxdata) {
thebox$height = location[[1]]$geometry$coordinates[[3]]
# attach a custom class for methods
class(thebox) = c('sensebox', class(thebox))
thebox
osem_as_sensebox(thebox)
}

@ -73,3 +73,30 @@ summary.sensebox = function(object, ...) {
invisible(object)
}
#' Converts a foreign object to an sensebox data.frame.
#' @param x A data.frame to attach the class to
#' @export
osem_as_sensebox = function(x) {
ret = as.data.frame(x)
class(ret) = c('sensebox', class(x))
ret
}
#' @export
filter_.sensebox = dplyr_class_wrapper(osem_as_sensebox)
#' @export
filter.sensebox = dplyr_class_wrapper(osem_as_sensebox)
#' @export
mutate_.sensebox = dplyr_class_wrapper(osem_as_sensebox)
#' @export
mutate.sensebox = dplyr_class_wrapper(osem_as_sensebox)
#' maintains class / attributes after subsetting
#' @noRd
#' @export
`[.sensebox` = function(x, i, ...) {
s = NextMethod('[')
mostattributes(s) = attributes(x)
s
}

@ -6,3 +6,31 @@ plot.osem_measurements = function (x, ...) {
par(mar = oldpar$mar)
invisible(x)
}
#' Converts a foreign object to an osem_measurements data.frame.
#' @param x A data.frame to attach the class to
#' @export
osem_as_measurements = function(x) {
ret = as.data.frame(x)
class(ret) = c('osem_measurements', class(x))
ret
}
#' @export
filter_.osem_measurements = dplyr_class_wrapper(osem_as_measurements)
#' @export
filter.osem_measurements = dplyr_class_wrapper(osem_as_measurements)
#' @export
mutate_.osem_measurements = dplyr_class_wrapper(osem_as_measurements)
#' @export
mutate.osem_measurements = dplyr_class_wrapper(osem_as_measurements)
#' maintains class / attributes after subsetting
#' @noRd
#' @export
`[.osem_measurements` = function(x, i, ...) {
s = NextMethod('[')
mostattributes(s) = attributes(x)
s
}

@ -0,0 +1,14 @@
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/measurement_utils.R
\name{osem_as_measurements}
\alias{osem_as_measurements}
\title{Converts a foreign object to an osem_measurements data.frame.}
\usage{
osem_as_measurements(x)
}
\arguments{
\item{x}{A data.frame to attach the class to}
}
\description{
Converts a foreign object to an osem_measurements data.frame.
}

@ -0,0 +1,14 @@
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/box_utils.R
\name{osem_as_sensebox}
\alias{osem_as_sensebox}
\title{Converts a foreign object to an sensebox data.frame.}
\usage{
osem_as_sensebox(x)
}
\arguments{
\item{x}{A data.frame to attach the class to}
}
\description{
Converts a foreign object to an sensebox data.frame.
}

@ -1,5 +1,5 @@
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/utils.R
% Please edit documentation in R/00utils.R
\name{osem_as_sf}
\alias{osem_as_sf}
\title{Convert a \code{sensebox} or \code{osem_measurements} dataframe to an

Loading…
Cancel
Save