R/classes_methods.R

Defines functions source_data.funnelplot source_data outliers.funnelplot outliers limits.funnelplot limits tau2.funnelplot tau2 phi.funnelplot phi summary.funnelplot plot.funnelplot print.funnelplot validate_funnel_plot new_funnel_plot

Documented in limits outliers phi source_data tau2

#' @title Constructor for new funnel plot object
#' @param x List of objects to convert to class
#' @noRd

new_funnel_plot <- function(x = list()) {

  stopifnot(is.list(x))

  structure(x,
            class = "funnelplot")

}



#' @title Validator for new funnel plot object
#' @param funnelplot object of class funnelplot
#' @noRd

validate_funnel_plot <- function(funnelplot){

  if (!is.list(funnelplot[[1]])){
    stop(
      "Invalid ggplot object"
    )
  }
  if (!is.data.frame(funnelplot[[2]])){
    stop(
      "Invalid limits data.frame"
    )
  }
  if (!is.data.frame(funnelplot[[3]])){
    stop(
      "Invalid aggregate date.frame"
    )
  }
  if (!is.numeric(funnelplot[[4]])){
    stop(
      "Invalid phi value, requires double()"
    )
  }
  if (!is.numeric(funnelplot[[5]])){
    stop(
      "Invalid tau2 value, requires double()"
    )
  }
  if (!is.logical(funnelplot[[6]])){
    stop(
      "Invalid draw_adjusted value.  Expects logical."
    )
  }
  if (!is.logical(funnelplot[[7]])){
    stop(
      "Invalid draw_unadjusted value.  Expects logical."
    )
  }
  if (!is.data.frame(funnelplot[[8]])){
    stop(
      "Invalid outliers date.frame"
    )
  }
}



#### Methods

#'@export

print.funnelplot <- function(x, ...){

  print(x[[1]])

  cat("A funnel plot object with", nrow(x[[3]]), "points of which", nrow(x[[8]]), "are outliers. \n")

  if(x[[6]]==TRUE){cat("Plot is adjusted for overdispersion. \n")}
  else {cat("Plot is not adjusted for overdispersion. \n")}

}


#'@export

plot.funnelplot <- function(x, ...){

  x[[1]]

}


#'@encoding UTF-8
#'@export

summary.funnelplot <- function(object, ...){

  cat("A funnel plot object with", nrow(object[[3]]), "points of which", nrow(object[[8]]), "are outliers. \n")

  cat("Dispersion ratio: \u03d5 =", object[[4]],". \n")
  if(object[[6]]==TRUE){cat("Plot is adjusted for overdispersion. Between unit variance:
  \U1D70F\u00B2, =", object[[5]], ". \n")}
  else {cat("Plot is not adjusted for overdispersion. \n")}

  cat("Outliers: \n")
  print(object[[8]])

}

#' Phi class for funnel plots
#'
#' @title dispersion ratio, \eqn{\phi}, for Funnel plots
#' @param x object of class funnel plot
#' @export
phi <- function(x) {
  UseMethod("phi")
}



#'@export

phi.funnelplot <- function(x){

  x[[4]]

}

#' Tau2 class for funnel plots
#'
#' @title between groups variance, \eqn{\tau^2}, for Funnel plots
#' @param x object of class funnel plot
#' @export
tau2 <- function(x) {
  UseMethod("tau2")
}


#'@export

tau2.funnelplot <- function(x){

  x[[5]]

}


#' Limits class for funnel plots
#'
#' @title Funnel plot limits
#' @param x object of class funnel plot
#' @export
limits <- function(x) {
  UseMethod("limits")
}


#'@export

limits.funnelplot <- function(x){

  x[[2]]

}



#' Outliers class for funnel plots
#'
#' @title Funnel plot outliers
#' @param x object of class funnel plot
#' @export
outliers <- function(x) {
  UseMethod("outliers")
}


#'@export

outliers.funnelplot <- function(x){

  x[[8]]

}


#' Source data class for funnel plots
#'
#' @title source data used to create Funnel plots
#' @param x object of class funnel plot
#' @export
source_data <- function(x) {
  UseMethod("source_data")
}


#'@export
source_data.funnelplot <- function(x){

  x[[3]]
}

Try the FunnelPlotR package in your browser

Any scripts or data that you put into this service are public.

FunnelPlotR documentation built on June 7, 2023, 6:04 p.m.