R/piecewise.R

Defines functions piecewise

Documented in piecewise

#' @title creates a Piecewise object.
#' @description Create a piecewise object
#' @param models A list with the models.
#' @param condition A character vector with the conditions to use each model.
#' @param ... Other arguments
#' @importFrom magrittr %>%
#' @importFrom purrr map
#' @importFrom stats fitted
#' @importFrom stats predict
#' @examples
#' require(piecewise)
#' set.seed(0)
#' df_01 <- data.frame(x = 1:5, y = (1:5)+rnorm(5,0,1))
#' mod_01 <- glm("y ~ x", data = df_01)
#' con_01 <- "x >= 0 & x < 6"
#'
#' df_02 <- data.frame(x = 6:10, y = (5:1)+rnorm(5,0,1))
#' mod_02 <- glm("y ~ x", data = df_02)
#' con_02 <- "x >= 6 & x <= 10"
#' p <- piecewise(models = list(mod_01 = mod_01, mod_02 = mod_02),condition = c(con_01, con_02))
#'
#' # get fitted values for each model
#' fitted(p)
#'
#' # predict some values
#' newdata <- data.frame(x = 1.5)
#' predict(p, newdata = newdata)
#'
#' @export
piecewise <- function(models = NULL, condition = NULL, ...){

  .f <- function(condition, ...){
    co <- parse(text = condition) %>% as.list()
    function(...){
      li <- list(...)
      purrr::map(co, eval, li) %>% unlist()
    }
  }

  structure(
    list(
      models = models,
      condition = .f(condition, ...)
    ), class = "plm"
  )
}
alvarofranq/piecewise documentation built on May 27, 2019, 7:43 a.m.